什么是C++相当于python collections.Counter?

con*_*cia 2 c++ python counter object equivalent

python collections.Counter对象跟踪对象的计数.

>> from collections import Counter
>> myC = Counter()
>> myC.update("cat")
>> myC.update("cat")
>> myC["dogs"] = 8
>> myC["lizards"] = 0
>> print(myC)
{"cat": 2, "dogs": 8, "lizards": 0}
Run Code Online (Sandbox Code Playgroud)

是否有类似的C++对象,我可以轻松跟踪类型的出现次数?也许是map为了string?请记住,上面只是一个例子,在C++中,这将推广到其他类型.

Ste*_*ner 6

你可以使用std::map像:

#include <iostream>
#include <map>

int main()
{
    std::map<std::string,int> counter;
    counter["dog"] = 8;
    counter["cat"]++;
    counter["cat"]++;
    counter["1"] = 0;

    for (auto pair : counter) {
        cout << pair.first << ":" << pair.second << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1:0
cat:2
dog:8
Run Code Online (Sandbox Code Playgroud)


Ale*_*rov 6

如果您想要平均查找复杂度恒定(就像使用 collections.Counter 一样),您可以使用std::unordered_map 。std::map “通常实现为红黑树”,因此查找的复杂性与容器的大小成对数。而且我们的内置库中没有 Python 中的红黑树实现。

std::unordered_map<std::string,int> counter;
counter["dog"] = 8;
counter["cat"]++;
counter["cat"]++;
counter["1"] = 0;

for (auto pair : counter) {
    cout << pair.first << ":" << pair.second << std::endl;
}
Run Code Online (Sandbox Code Playgroud)