【发布时间】:2020-03-30 14:40:36
【问题描述】:
我想将std::map 中的所有值相互比较。
我坚持:对于线性容器,比如向量,我会遍历索引i=1; v[i].isUniform(v[i-1])。但我不能用地图做到这一点。我期待听到聪明的想法。
这是我想要完成的一些伪代码:
class MyData
{
public:
bool isUniform(const MyData& other) const
{
return this->speed == other.speed && this->ban == other.ban;
}
private:
bool ban;
int speed;
}
std::map<int, MyData> myMap;
bool allUniform = true;
for(item_1, item_2 : myMap) // how to implement this?
{
if(!item_1.isUniform(item_2))
{
allUniform = false;
}
}
最优雅(可读和高效)的方法是什么?
【问题讨论】:
-
isUniform实际上是做什么的?可能有一种聪明的方法可以检查整个地图,而无需像您想的那样进行 O(n^2) 比较。 -
“比较所有值”是什么意思?检查所有值是否相同?成对比较每个值与其他值(N * N)?还是别的什么?
-
你考虑过两个 for 循环吗?
for(item_1 : myMap) {for(item_2 : myMap) {...}} -
添加了有关
isUniform()的更多详细信息。它基本上只检查一些(不是所有)成员是否相等。 -
如果您只想比较一些项目,请先将这些项目取出并放在单独的地图中。然后使用
std::all_of或该地图下方给出的任何优秀解决方案。
标签: c++ c++11 iterator stdmap c++98