Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 搜索c++;授权地图_C++_Dictionary_Search_Authorization_Usergroups - Fatal编程技术网

C++ 搜索c++;授权地图

C++ 搜索c++;授权地图,c++,dictionary,search,authorization,usergroups,C++,Dictionary,Search,Authorization,Usergroups,我想知道搜索用户组地图的有效方法是什么。假设我们有一个特定对象的映射,用户组有权访问该映射 是否最好为每个用户组生成另一个地图,以便能够更快地访问?这实际上取决于您预期的使用模式。您有三种类型的实体: 物体 团体 使用者 为了简化事情,让我们只关注后2项 对于给定的组,您是否优化了要检查特定用户是否属于该组的情况 从所有组中删除用户是否非常重要?它是否应该影响多线程环境中的其他用户?如果是,它必须是原子的吗 您是否在优化尺寸或速度 根据答案(对这些问题和其他许多问题的回答),不同的解决方案可能适

我想知道搜索用户组地图的有效方法是什么。假设我们有一个特定对象的映射,用户组有权访问该映射


是否最好为每个用户组生成另一个地图,以便能够更快地访问?

这实际上取决于您预期的使用模式。您有三种类型的实体:

  • 物体
  • 团体
  • 使用者
  • 为了简化事情,让我们只关注后2项

  • 对于给定的组,您是否优化了要检查特定用户是否属于该组的情况

  • 从所有组中删除用户是否非常重要?它是否应该影响多线程环境中的其他用户?如果是,它必须是原子的吗

  • 您是否在优化尺寸或速度

  • 根据答案(对这些问题和其他许多问题的回答),不同的解决方案可能适合您

    例如,考虑以下内容:

    #include <unordered_map>
    #include <unordered_set>
    
    using user_id_t = std::size_t;
    using group_id_t = std::size_t;
    
    using group_to_users_t = std::unordered_map<group_id_t, std::unordered_set<user_id_t>>;
    
    int main() {
        group_to_users_t authorized;
    
        authorized[3].insert(20);
    }
    
    #include <boost/multi_index_container.hpp>
    #include <boost/multi_index/hashed_index.hpp>
    #include <boost/multi_index/ordered_index.hpp>
    #include <boost/multi_index/identity.hpp>
    #include <boost/multi_index/member.hpp>
    
    using namespace boost;
    using namespace boost::multi_index;
    
    struct permission {
        std::size_t m_group_id;
        std::size_t m_user_id;
    };
    
    using  permissions_t = multi_index_container<
        permission,
        indexed_by<
            ordered_non_unique<member<permission, decltype(permission{}.m_user_id), &permission::m_user_id>>,
            ordered_non_unique<member<permission,std::size_t,&permission::m_group_id>>>>;
    
    int main() {
        permissions_t permissions;
    
        permission foo{3, 20};
        permissions.insert(foo);
    }
    
    它使用映射同时映射组和用户的权限。因此,它允许组和用户有效访问;相反,它是一个更复杂的对象,具有更高的空间和时间开销