C++ 如何对多重映射进行迭代/计数<;字符串,字符串>;
我的课是这样的:C++ 如何对多重映射进行迭代/计数<;字符串,字符串>;,c++,stl,map,multimap,C++,Stl,Map,Multimap,我的课是这样的: class Outgoing { multimap<string,string> outgoing; public: void makeConnection(string key, string value) { outgoing.insert(pair<string,string>(key,value)); } void iterate() { multimap
class Outgoing
{
multimap<string,string> outgoing;
public:
void makeConnection(string key, string value)
{
outgoing.insert(pair<string,string>(key,value));
}
void iterate()
{
multimap<string, string>::iterator it;
multimap<string, string>::iterator it2;
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret;
for (it = outgoing.begin();it != outgoing.end();++it)
{
ret = outgoing.equal_range((*it)); ??????
for (it2=ret.first; it2!=ret.second; ++it2)
{
???????
}
}
}
};
for (multimap<string, string>::iterator itr = myMap.begin(); itr != myMap.end(); ) {
/* ... process *itr ... */
/* Now, go skip to the first entry with a new key. */
multimap<string, string>::iterator curr = itr;
while (itr != myMap.end() && itr->first == curr->first)
++itr;
}
我想知道如何获得特定键的值数?例如,在上述问题中,对于str1,它将是2
正如你所看到的,我在四处挖掘之后试图做些什么,但没有成功
我的代码有什么问题
谢谢
编辑:::在templatetypedef的注释之后,我将代码编辑为:
for (it = outgoing.begin();it != outgoing.end();++it)
{
cout<< (*it).first << " "<< outgoing.count((*it).first);
}
for(it=outgoing.begin();it!=outgoing.end();+it)
{
cout您可以为此使用count
函数,该函数返回带有给定键的multimap
中的条目数
outgoing.count("str1")
将产生值2
<>在C++中,没有办法在<代码> MultIMAP 中迭代唯一的密钥。如果您想重复这些键,有两个选项您可能需要考虑:
您可以从使用multimap
更改为map
。这样,每个键都是唯一的,您只需查看相应向量中的元素数即可轻松确定与每个键关联的值数
您可以有一个顶级循环来迭代所有关键点,然后有一个内部循环来跳过重复的关键点
作为选项2的示例,您可以尝试以下操作:
class Outgoing
{
multimap<string,string> outgoing;
public:
void makeConnection(string key, string value)
{
outgoing.insert(pair<string,string>(key,value));
}
void iterate()
{
multimap<string, string>::iterator it;
multimap<string, string>::iterator it2;
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret;
for (it = outgoing.begin();it != outgoing.end();++it)
{
ret = outgoing.equal_range((*it)); ??????
for (it2=ret.first; it2!=ret.second; ++it2)
{
???????
}
}
}
};
for (multimap<string, string>::iterator itr = myMap.begin(); itr != myMap.end(); ) {
/* ... process *itr ... */
/* Now, go skip to the first entry with a new key. */
multimap<string, string>::iterator curr = itr;
while (itr != myMap.end() && itr->first == curr->first)
++itr;
}
for(multimap::iterator itr=myMap.begin();itr!=myMap.end();){
/*…过程*itr*/
/*现在,用新键跳到第一个条目*/
多重映射::迭代器curr=itr;
while(itr!=myMap.end()&&itr->first==curr->first)
++itr;
}
希望这有帮助!函数equal_range提供了一对迭代器,映射的第一个和最后一个元素共享一个特定的键
//多重映射::相等\u范围
#包括
#包括
int main()
{
std::多重映射mymm;
mymm.插入(标准::对('a',10));
mymm.插入(标准::对('b',20));
mymm.插入(标准::对('b',30));
mymm.插入(标准::对('b',40));
mymm.插入(标准::对('c',50));
mymm.插入(标准::对('c',60));
mymm.插入(标准::对('d',60));
std::可能与Quick question的可能重复非常相似,为什么要回滚删除“”的编辑?@Sam我有一个习惯,在所有答案的结尾都是“希望这有帮助!”,所以我想我应该保持一致性:-)也许你应该在for循环声明中使用上界(),而不是自己循环