簡體   English   中英

如何為地圖&lt;地圖分配值 <int,int> ,布爾&gt;?

[英]How can I assign values to a map < map<int,int> , bool >?

如何為這樣聲明的地圖分配值?

map < map<int,int> , bool > Map;

我希望代碼看起來像這樣:

Map[u][v]=true;

其中uv可以最大為10^5

我該如何編碼?

您想要的是:

std::map<int, std::map<int, bool> > myMap;

然后,您可以通過以下方式設置/獲取值:

bool myBool;
myMap[u][v] = myBool;
myBool = myMap[u][v];

如果不需要@@ WhozCraig在注釋中指出的map的排序行為,那么unordered_map是一個更快的選擇。

std::unordered_map<int, std::unordered_map<int, bool> > myMap;

但是,用助手類包裝單個unordered_map通常會使執行時間減半,因為只需要執行一次哈希就可以查找兩個整數。

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 }; }
};

那么用法將是相同的。 例如:

Map2ints myMap;
myMap[70000][151] = true;
bool a = myMap[70000][151];  // which sets a to true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM