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循环声明中使用上界(),而不是自己循环