一组结构缺少元素

Set of Structs Missing an Element

本文关键字:元素 结构 一组      更新时间:2023-10-16
#include <bits/stdc++.h>
using namespace std;
int dist[2];
struct cmp {
    bool operator() (const int &a, const int &b) {
        return dist[a] < dist[b];
    }
};
set<int, cmp> s;
int main() {
    dist[0] = 2;
    dist[1] = 2;
    s.insert(1);
    s.insert(0);
    for(set<int>::iterator it = s.begin(); it != s.end(); ++it) {
        cout << *it << " " << dist[*it] << endl;
    }
}

上述代码输出:

1 2

为什么这是真的?应该不输出:

1 2

0 2

谢谢!

std::set仅包含每个 unique 对象的一个副本。当您尝试插入弱排序下等效的两个对象时,对象被确定为不是唯一的,并且只有第一个对象保留在容器中。

在您的代码中,由于比较器的定义,01在弱排序下等效。那就是:

dist[0] = 2;
dist[1] = 2;
cmp compare;
bool res1 = compare(0, 1); //false
bool res2 = compare(1, 0); //false

当两个方向上的比较都是错误的时,两个对象被认为是等效的。

中只有第一个插入的第一个。

使用std::multiset允许重复。