首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为映射< map<int,int>,bool >赋值?

如何为映射< map<int,int>,bool >赋值?
EN

Stack Overflow用户
提问于 2018-09-20 06:07:23
回答 2查看 118关注 0票数 0

我如何为像这样声明的map赋值?

代码语言:javascript
复制
map < map<int,int> , bool > Map;

我希望代码看起来像这样:

代码语言:javascript
复制
Map[u][v]=true;

其中uv可以是最大10^5

我如何对此进行编码?

EN

回答 2

Stack Overflow用户

发布于 2018-09-20 06:11:17

你想要的是:

代码语言:javascript
复制
std::map<int, std::map<int, bool> > myMap;

然后,您可以通过以下方式设置/获取值:

代码语言:javascript
复制
bool myBool;
myMap[u][v] = myBool;
myBool = myMap[u][v];
票数 4
EN

Stack Overflow用户

发布于 2018-09-22 23:43:22

@WhozCraig在评论中指出,如果不需要map的排序行为,那么unordered_map是一个更快的选择。

代码语言:javascript
复制
std::unordered_map<int, std::unordered_map<int, bool> > myMap;

但是,使用帮助器类包装单个unordered_map通常会将执行时间减半,因为只需执行一次散列即可查找两个整数。

代码语言:javascript
复制
class Map2ints
{
    class Map2Helper {
        int u;
        std::unordered_map<int64_t, bool> &vmap;
    public:
        bool& operator[](int v) { return vmap[u | (static_cast<int64_t>(v) << 32)]; }
        Map2Helper(int u, std::unordered_map<int64_t, bool> &vmap) :u(u), vmap(vmap) {}
    };
    std::unordered_map<int64_t, bool> vmap;
    bool contains(int u, int v) { return vmap.find(u | (static_cast<int64_t>(v) << 32))!=vmap.end(); }
public:
    Map2Helper operator[](int u) { return Map2Helper{ u, vmap }; }
};

那么用法应该是一样的。例如:

代码语言:javascript
复制
Map2ints myMap;
myMap[70000][151] = true;
bool a = myMap[70000][151];  // which sets a to true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52414826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档