c++ - 如何迭代/计数 multimap<string,string>

标签 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<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)
            {
                ???????

             }
        }
    }
};

背景:

我想表示一个可以有很多节点的图。键不会重复,但可以有多个值。

str1  ----> val1
str1  ----> val2
str2 -----> val3

我想知道如何获取特定键值的数量?例如在上面的问题中,对于 str1 它将是 2?

如您所见,我在四处挖掘之后尝试做一些事情,但没有成功。

我的代码有什么问题?

谢谢

编辑::: 在 templatetypedef 的评论之后,我将代码编辑为:

for (it = outgoing.begin();it != outgoing.end();++it)
{
    cout<< (*it).first << " "<<  outgoing.count((*it).first); 

}

我可以得到计数,但是 key("str1") 出现了两次。所以我看到的答案是 2 2 1。

如果有人教我如何以这样一种方式迭代,我将非常感激,我只得到一个 key 。顺便说一句,谢谢,templatetypedef

最佳答案

您可以使用 count这个函数,它返回 multimap 中的条目数使用给定的 key 。在你的例子中,写作

outgoing.count("str1")

会产生值 2。

在 C++ 中,无法仅遍历 multimap 中的唯一键。 .如果您只想迭代这些键,您可能需要考虑两个选项:

  1. 你可以改变使用 multimap< string, string >map<string, vector<string> > .这样,每个键都是唯一的,您只需查看相应 vector 中的元素数量,就可以轻松确定每个键关联了多少个值。 .

  2. 您可以有一个顶层循环来遍历所有键,然后有一个内部循环来跳过重复的键。

作为选项 2 的示例,您可以尝试如下操作:

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;
}

希望这对您有所帮助!

关于c++ - 如何迭代/计数 multimap<string,string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424805/

相关文章:

c++ - 指针复制到范围外c++

c++ - 对 vector 内的值进行排序时,排序方法会生成错误

c++ - 一种使用 STL 计算 std::string vector 中字符的方法?

c++ - 为什么 vector 在一个测试中比 map 快,而在另一个测试中不是?

c++ - 将 boost::transform_iterator 与非常量仿函数一起使用

C++语法题,class关键字的使用

c++ - 在将 char 数组复制到字符串期间节省 CPU 周期(提高性能)

java - 如何通过 LinkedHashMap<String,ArrayList<String>> 创建循环?

map - 如何在 Go 中创建 map[[16]byte][]string?

c++ - ASN1C编译