我计划使用带有两把钥匙的地图进行分配。我创建我的地图如下:
map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;
我很难用map.find()和map.insert()来查找地图中的现有条目,或者如果两个键组合是新的,则插入新值。有人可以举个例子吗?
答案 0 :(得分:3)
它应该与任何地图相同,除非你必须为你的钥匙做成对。
插入:
map< pair<string,string>, int > mymap;
pair<string, string> key = make_pair("bob", "sue");
mymap[ key ] = 5; // you can inline make_pair if you prefer.
// or you can use insert method
mymap.insert( key, 5 );
查找:
pair<string, string> key = make_pair("bob", "sue");
auto it = mymap.find( key ); // you can inline make_pair if you prefer.
if ( it != mymap.end() )
{
cout << it->second;
}
请注意,在地图中使用字符串作为键可能会出现性能问题。此外,该对中字符串的顺序具有重要意义。
答案 1 :(得分:1)
it = myMap.find(make_pair("hi","mike"));
insert
有点尴尬,因为你正在插入一对第一个组件也是一对:
myMap.insert(make_pair( make_pair("hi","john"), 4 ) );
答案 2 :(得分:0)
这有效:
typedef pair<string, string> key_type;
map<key_type, int> myMap;
myMap.insert(std::make_pair(key_type("a","b"),1));
map<pair<string, string>, int>::iterator it;
it = myMap.find(key_type("a","b"));
可以用C ++ 11中的insert
替换 emplace
来缩短代码:
myMap.emplace(key_type("a","b"),1);
答案 3 :(得分:0)
您应该查看Boost multiIndex