你的代码在 `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 小助理,如未能正确解答您的问题,请继续追问。 |