0
map <int, string> rollCallRegister;
map <int, string> :: iterator rollCallRegisterIter;

pair <map <int, string> , bool> returnPair;

rollCallRegister.insert (pair <int, string> (1, "anisha"));

在此代码中,pair <map <int, string> , bool> returnPair;表示这对将映射行作为第一个值,将布尔值作为第二个值。

问题
如何在此处插入 bool rollCallRegister.insert (pair <int, string> (1, "anisha"));:?

其次,pair <map <int, string> :: iterator, bool> returnPair;这对将 map 的迭代器作为第一个输入。

问题
这与之前的对语法有何不同,因为插入方式仍然相同:rollCallRegister.insert (pair <int, string> (1, "anisha"));

4

3 回答 3

2

a 的第一个值pair<map<int, string >, bool>不是地图行,而是整个地图(因此可能不是您要查找的内容)。另一方面,第二对将映射条目与布尔值相关联。

关于插入,我真的不明白你的问题:在这两个样本中,你都插入了map<int, string>; 它与您定义的不同类型的对无关。要创建这两种对的实例,map在第一种情况下需要 a,在第二种情况下需要迭代器:

pair<map<string, int>, bool> p1(rollCallRegister, true);
pair<map<string, int>::iterator, bool> p2(rollCallRegisterIter, false);

编辑:

根据您对问题的评论,我认为您混淆了地图 ( ) 的内容和 ( )pair<string, int>返回的值。insertpair<map<string, int>::iterator, bool>

声明 amap<K,V>时,其内容存储在pair<K,V>. 因此,要在此映射中插入新条目,您需要创建一个包含要插入的键和值的对:

map<K,V> myMap;
pair<K,V> myEntry(key, value); // entry to insert

myMap.insert(myEntry);         //or you can create the entry on-the-fly
myMap.insert(make_pair(key, value));

现在,当您在地图中插入一个条目时,该键可能已经存在。如果是这种情况,那么插入应该“失败”:在调用 之后insert,键仍然与前一个值相关联。但是,应该警告调用者,他试图插入一个带有映射中已经存在的键的条目。

这是通过insert返回 a来实现的pair<map<K,V>::iterator, bool>,其中这对的第二个值是一个布尔值,指示是否发生了插入(键尚未出现在映射中)。第一个值是与键对应的条目的迭代器。此条目包含键及其关联值(您刚刚插入的那个,或者已经存在的那个)。

于 2012-01-12T09:16:48.590 回答
1

您也不能将bool插入到rollCallRegister中,因为在当前表单中它只需要一个 int 作为键和一个字符串作为值。

如果您希望rollCallRegister映射包含一对 (int, string) 作为键和一个bool 作为值,则需要将其更改为:

map <pair<int, string>, bool> rollCallRegister;
rollCallRegister.insert(std::make_pair(std::make_pair(yourint, yourstring), true/false));
于 2012-01-12T09:11:31.077 回答
0

相当琐碎:pair<pair <int, string>, bool>。你可能想调查一下make_pair

于 2012-01-12T09:12:46.467 回答