![](/img/trans.png)
[英]How do I declare and initialize this map<pair<int, int>, bool>?
[英]How can I assign values to a map < map<int,int> , bool >?
如何為這樣聲明的地圖分配值?
map < map<int,int> , bool > Map;
我希望代碼看起來像這樣:
Map[u][v]=true;
其中u
或v
可以最大為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.