pen*_*ope 7 c++ containers stl
我想创建一个记录来保存有关的信息
在树的节点中.我会明确地仅存储叶节点信息,而父节点中的信息可以通过结合这一切的信息获取的孩子(如儿童1具有的3个对象,B的1个对象,儿童2有1 A对象,C对象的2个对象有4个A对象,1个B对象和2个C对象.
从父节点请求此信息时,我会小心不要首先请求,使用和丢弃子节点的信息,然后是其父节点,但向上构造将是一个常见的操作.其他两个常见的操作直接来自我存储的内容:是X类的对象存在吗?以及有多少种X物品存在?还有多少种物品?
对象种类表示为整数,对象编号始终为整数值.什么是更好的选择(以及所选选项的参数):
std::multiset<int>,操作std::multiset::count()和std::multiset::find()操作(更容易结合但元素重复,难以获得完全不同的元素数)std::map<int, std::size_t>种类作为键和对象数量作为值(没有重复的元素,std::map::find()存在的函数,大小给出了存储的正确数量的对象种类,但访问不存在的元素会无意中增加大小)谢谢你的建议!
要根据比较谓词存储总共n个具有k个不同值的项目,则std::multiset分配n个二叉搜索树节点(*).一个std::map仅分配ķ(稍大)节点.
您std::multiset可以使用比较谓词可以认为两个项目相等但仍必须显式存储,因为它们在比较谓词不检查的某些方面有所不同.此外,迭代a multiset生成n个项中的map每一个,而a 将生成具有每个项的计数的k个不同项中的每一个.
在项目只是整数的情况下,请使用std::map.您的"多少个不同的项目"查询将只是一个调用size,它在恒定的时间内运行.
您声称"访问不存在的元素会无意中增加大小"仅在您用于operator[]访问节点时才会出现.find没有表现出这种行为.
(*)C++标准并不保证这些容器是作为(平衡的)BST实现的,但在我见过的所有实现中,它们都是.
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |