首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >set<class>插入问题

set<class>插入问题
EN

Stack Overflow用户
提问于 2011-03-29 00:24:16
回答 2查看 1.2K关注 0票数 1

为什么下面的程序不能工作?我怎么才能修复它?

代码语言:javascript
运行
复制
#include <iostream>
#include <set>

using namespace std;

class K {

private:
    long a;
};

int main ()
{   
    K a;
    set<K> b;

    b.insert(a);

    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-29 00:26:56

std::set需要对元素进行排序。它要求您可以按照某种顺序比较它的元素。

或者为您的类K添加一个operator <,或者向set类提供第二个模板参数--比较器,该参数决定两个K实例之间的顺序。

重载operator <很简单:

代码语言:javascript
运行
复制
bool operator <(K const& x, K const& y) {
     return x.a < y.a;
}

这意味着当且仅当其成员a小于另一个的成员时,一个K实例才小于另一个实例。

票数 6
EN

Stack Overflow用户

发布于 2011-03-29 00:38:06

set要求您的类定义了operator<。例如:

代码语言:javascript
运行
复制
class K {
public:

bool operator< (const K& other) const {
    return this->a < other.a;
}

private:

long a;

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5462032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档