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.