|
|
发表于 2025-3-21 23:20:27
|
显示全部楼层
你的代码在 `set` 中使用自定义比较器时出错,主要有以下几个问题:
1. **`MyCompare` 的 `operator()` 需要是 `public`**
你的 `MyCompare` 类中的 `operator()` 是 `private`,默认情况下,类的成员函数是 `private`,所以 `set` 无法访问它。你需要将 `operator()` 设为 `public`。
2. **`set` 需要指定比较器类型**
你在 `set` 的定义中没有正确指定 `MyCompare` 作为比较器。`set` 需要使用 `set<int, MyCompare>` 这样的格式。
### **修改后的代码**
- #include <iostream>
- #include <set>
- using namespace std;
- class MyCompare
- {
- public:
- bool operator()(const int &v1, const int &v2) const
- {
- return v1 > v2; // 降序排列
- }
- };
- void test4()
- {
- set<int, MyCompare> st; // 指定 MyCompare 作为比较器
- st.insert(10);
- st.insert(70);
- st.insert(30);
- st.insert(80);
- st.insert(20);
- for (set<int, MyCompare>::iterator it = st.begin(); it != st.end(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- }
- int main()
- {
- test4();
- return 0;
- }
复制代码
### **修正点**
1. **`operator()` 设为 `public`**,否则 `set` 不能访问它。
2. **`operator()` 需要加 `const`**,因为 `set` 需要一个**可调用的比较器**,而 `operator()` 不能修改 `MyCompare` 的状态。
3. **`set<int, MyCompare>`**,正确指定 `MyCompare` 作为 `set` 的比较器。
### **运行结果**
这段代码会按照**降序**(从大到小)排序并输出:
这样就可以正确使用 `set` 了!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|