C ++中的两个键映射

时间:2013-10-06 18:44:03

标签: c++ map stl

我计划使用带有两把钥匙的地图进行分配。我创建我的地图如下:

map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;

我很难用map.find()和map.insert()来查找地图中的现有条目,或者如果两个键组合是新的,则插入新值。有人可以举个例子吗?

4 个答案:

答案 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