Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::list中每种特定类型的对象数_C++_Loops_Map - Fatal编程技术网

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

C++ std::list中每种特定类型的对象数,c++,loops,map,C++,Loops,Map,我如何以一种通用的自动方式计算集合(特别是列表)中特定类型对象的数量,而不需要事先识别特定类型的对象? 我有一个类,Card,它分为红心、钻石、黑桃和梅花。玩家有一个std::list手牌。我想数一数每一位玩家手上每种类型的牌的数量 我不能,因为我正在初始化一个包含很多牌的牌组,我只想数玩家手中的牌 我可以做一组if语句: if ( strcmp( (*it)->cardType,"hearts")==0) { ... } else if ( strcmp( (*it)->cardT

我如何以一种通用的自动方式计算集合(特别是列表)中特定类型对象的数量,而不需要事先识别特定类型的对象?

我有一个类,
Card
,它分为
红心
钻石
黑桃
梅花
。玩家有一个
std::list手牌
。我想数一数每一位玩家手上每种类型的牌的数量

我不能,因为我正在初始化一个包含很多牌的
牌组
,我只想数玩家手中的牌

我可以做一组if语句:

if ( strcmp( (*it)->cardType,"hearts")==0) {
...
} else if ( strcmp( (*it)->cardType,"diamonds")==0) {
...
} else if ...
但是,如果我想添加一种新的卡片类型(我的目标是用大约200种类型的卡片模拟游戏),这将变得很乏味

将每个元素插入到一个集合中会给我一个简单的答案,但我想知道每个不同元素的数量(“4颗心,3根球杆等”,而不是“4套不同的西装”)


是否有一个已经实现的方法在C++ STL?< /P> < P>使用<代码> STD::MAP< /COD> AS:

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

for(auto const & item : hand)
    ++counts[item->cardType]; //because item is Card*
它将打印如下内容:

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

希望这能有所帮助。

顺便说一句,你想循环使用
hand
并使用
++counts[item->cardType()]
@aschepper:如果顺序不相关,那么选择这个很好。如果你可以使用
list
或者
list
的话,为什么要使用
list
hearts appears 3 times.
diamonds appears 7 times.
spades appears 4 times.