2012-01-12 62 views
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作为第二个值。STL对输入与STL映射

问题
如何插入布尔这里:rollCallRegister.insert (pair <int, string> (1, "anisha"));

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

问题
这是如何从以前的对语法不同,由于插入的方式仍然是相同的:rollCallRegister.insert (pair <int, string> (1, "anisha"));

+0

目前还不清楚问题在哪。 insert方法返回迭代器到插入的键和一个布尔值,显示是否发生了插入(或者键已经存在)? – visitor 2012-01-12 09:09:59

+0

第一个问题:你的意思是? 'rollCallRegister'没有'bool'成员,只有'returnPair'。你想把'rollCallRegister'和'bool'一起插入'returnPair'吗? – bitmask 2012-01-12 09:10:15

+0

@visitor插入返回一对,并且该对的第一个参数可以是地图行以及地图迭代器。但插入的插入语法对于两种方式都是相同的。为什么?其次,当我们将这对变为'pair ,bool>'插入返回什么?一个迭代器? – 2012-01-12 09:25:22

回答

1

pair<map<int, string >, bool>的第一个值是而不是一个地图行,它是一个完整的地图(可能不是你要找的东西)。另一方面,第二对将地图条目与布尔值相关联。

关于插入,我没有真正得到你的问题:在这两个示例中,你插入到map<int, string>;它与您定义的不同类型的对无关。为了创建这两种对的情况下,你在第一种情况下需要map,并在第二个迭代器:

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>)返回的值。

当您申报map<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返回pair<map<K,V>::iterator, bool>来实现,其中第二个值是一个布尔值,指示插入是否发生(密钥尚未存在于地图中)。第一个值是对应于键的条目的迭代器。此条目包含密钥及其关联值(您刚插入的值或已存在的值)。

+0

Luc和@visitor哦,我现在得到了:banghead:我的问题是我在想,我已经声明了这对:'pair :: iterator,bool>'是插入到地图中的一个。事实上,插入需要一对简单的任意两个值,并将迭代器返回到地图的行和布尔值!我想我现在已经明白了。谢谢。 – 2012-01-12 09:39:20

+0

感谢您的编辑。是的,我很困惑。 :卫生署: – 2012-01-12 09:43:48

1

你也不能插入布尔rollCallRegister,因为它只需INT关键和一个字符串,如您目前的表单值。

如果您希望rollCallRegister地图包含对(整型,字符串)为重点的和布尔作为价值你需要将其更改为:

map <pair<int, string>, bool> rollCallRegister; 
rollCallRegister.insert(std::make_pair(std::make_pair(yourint, yourstring), true/false)); 
+0

'map bitmask 2012-01-12 09:13:19

+0

@bitmask:标准中定义的map 的语义是对序列的字典排序。顺便说一句,钥匙不需要全部订单,而只需要一个严格的薄弱订单。 – celtschk 2012-01-12 09:21:32

+0

将示例更改为使用一对作为关键字。 – Kristofer 2012-01-12 09:21:50

0

相当琐碎: pair<pair <int, string>, bool>。不过你可能想看看make_pair