std::列表中每种特定类型的对象数
Number of objects of each specific type in std::list
我如何以一种通用的自动方式计算集合(特别是列表)中特定类型的对象的数量,而不需要我提前识别特定类型的目标
我有一个类Card
,它被分为hearts
、diamonds
、spades
和clubs
好几次。玩家有一个std::list<Card *> hand
。我想数一下目前每个玩家手中每种牌的数量。
我无法计算特定对象类型的实例,因为我正在初始化一个包含大量卡片的deck
,我只想计算玩家手中的卡片。
我可以做一组if语句:
if ( strcmp( (*it)->cardType,"hearts")==0) {
...
} else if ( strcmp( (*it)->cardType,"diamonds")==0) {
...
} else if ...
但如果我想添加一种新的牌类型(我的目标是用大约200种类型的牌模拟游戏),这将变得乏味。
将每个元素插入一个集合中,我会得到不同元素的数量,但我想知道这些不同元素中每个元素的数量("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.
希望能有所帮助。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息