c++ - std::list 中每种特定类型的对象数

标签 c++ loops map

如何以不需要我提前识别特定类型对象的一般自动方式计算集合(特别是列表)中特定类型对象的数量?

我有课,Card , 它被多次 segmentation 为 hearts , diamonds , spadesclubs .玩家有一个 std::list<Card *> hand .我想统计每个玩家手中每种牌的数量。

我不能count instances of specific object types ,因为我正在初始化一个 deck包含很多卡片,我只想数玩家手中的卡片。

我可以做一组 if 语句:

if ( strcmp( (*it)->cardType,"hearts")==0) {
...
} else if ( strcmp( (*it)->cardType,"diamonds")==0) {
...
} else if ...

但是如果我想添加一种新的纸牌类型(我的目标是用大约 200 种纸牌模拟游戏),这会变得乏味。

将每个元素插入到集合中会得到 number of distinct elements ,但我想知道每个不同元素的数量(“4 颗心,3 颗梅花等”,而不是“4 种不同的花色”)。

在 C++ STL 中是否有已经实现的方法来执行此操作?

最佳答案

std::map 用作:

std::map<std::string, int>  counts;

for(auto const & item : hand)
    ++counts[item->cardType]; //because item is Card*

此处 std::map 的重载运算符 [] 返回对关联键值的引用(如果该键存在)。使用返回的引用递增该值。如果该键不存在,则使用该键创建一个新条目,默认初始化值在这种情况下为零,然后返回引用。

完成计数后,您可以将它们打印为:

for(auto const & c : counts)
     std::cout << c.first << " appears  " << c.second << " times.\n";

它将打印如下内容:

hearts appears 3 times.
diamonds appears 7 times.
spades appears 4 times.

希望对您有所帮助。

关于c++ - std::list 中每种特定类型的对象数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233554/

相关文章:

Python:理解循环

java - 用两个键映射一个值?

c++ - Visual-Studio,为所有人创建定义的现有方法?

c++ - 如何创建文件路径可以像磁盘一样访问的虚拟文件系统

javascript - 将结果写入nodeJS中的csv文件

map - 从 garmin 读取信息

ios - Cocos2D 可以实现动态瓦片 map 吗?

c++ - 为什么 std::exception 在 std::bad_alloc 之前捕获我的异常?

c++ - 具有包含 void* 的结构的函数的 const 正确性和参数

python - 有没有更快的方法来遍历和删除 Pandas 数据框中的特定行?