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++中,这将推广到其他类型.
你可以使用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)
如果您想要平均查找复杂度恒定(就像使用 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)