c++ - 如何在 C++ 中拥有一组结构

标签 c++ struct set

我有一个具有唯一键的结构。我想将这些结构的实例插入到一个集合中。我知道要做到这一点,必须重载 < 运算符,以便 set 可以进行比较以进行插入。

以下不起作用:

#include <iostream>
#include <set>
using namespace std;
struct foo 
{
      int key;
};

bool operator<(const foo& lhs, const foo& rhs)
{
      return lhs.key < rhs.key;
}

set<foo> bar;

int main()
{
    foo *test = new foo;
    test->key = 0;
    bar.insert(test);
}

最佳答案

这可能会有所帮助:

struct foo
{
  int key;
};

inline bool operator<(const foo& lhs, const foo& rhs)
{
  return lhs.key < rhs.key;
}

如果您使用命名空间,最好声明 operator<()在同一个命名空间中的函数。


为了您编辑后的完整性,正如其他人指出的那样,您正在尝试添加 foo*在哪里 foo预计。

如果你真的想处理指针,你可以把 foo* 换行。进入智能指针类(auto_ptrshared_ptr,...)。

但请注意,在这两种情况下,您都会失去重载 operator< 的好处在 foo 上运行,而不是 foo* .

关于c++ - 如何在 C++ 中拥有一组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816658/

相关文章:

C宏返回一个结构

循环结构声明C

python - python 将集合中的字符串分组到字典中

sql - 如何在 SQL 中为值列表设置别名

c - 使用文件中的 OpenSSL 设置私钥和公钥 EC key

c++ - 调用 Clock::getElapsedTime() 时 SFML 2.0 崩溃

c++ - 真正无锁 MPMC 环形缓冲区?线程能够互相协助以避免阻塞吗?

c++ - 带指针的模板,创建二维数组

c++ - 我可以将 QObject 的两个子类移动到同一个 QThread 吗?

c - c中的memset结构数组时出现段错误