如何将矢量转换为集合?

新手上路,请多包涵

我有一个向量,我在其中保存对象。我需要将其转换为设置。我一直在阅读有关集合的信息,但我仍然有几个问题:

  • 如何正确初始化它?老实说,一些教程说可以像 set<ObjectName> something 一样初始化它。其他人说你也需要一个迭代器,比如 set<Iterator, ObjectName> something

  • 如何正确插入它们。再说一次,只写 something.insert(object) 就够了吗?

  • 如何从集合中获取特定对象(例如,其中具有命名变量的对象,等于“ben”)?

我必须将向量本身转换为一个集合(也就是我必须使用集合而不是向量)。

原文由 Marius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 724
2 个回答

您没有告诉我们太多关于您的对象的信息,但假设您有一个这样的类:

 class Thing
{
public:
  int n;
  double x;
  string name;
};

你想把一些东西放到一个集合中,所以你试试这个:

 Thing A;
set<Thing> S;
S.insert(A);

这失败了,因为集合是排序的,并且没有办法对事物进行排序,因为没有办法比较它们中的两个。您必须提供 operator<

 class Thing
{
public:
  int n;
  double x;
  string name;

  bool operator<(const Thing &Other) const;
};

bool Thing::operator<(const Thing &Other) const
{
  return(Other.n<n);
}

...
set<Thing> S;

比较函数对象

 class Thing
{
public:
  int n;
  double x;
  string name;
};

struct ltThing
{
  bool operator()(const Thing &T1, const Thing &T2) const
  {
    return(T1.x < T2.x);
  }
};

...
set<Thing, ltThing> S;

要查找名称为“ben”的事物,您可以遍历该集合,但如果您更具体地告诉我们您想要做什么,这将非常有帮助。

原文由 Beta 发布,翻译遵循 CC BY-SA 3.0 许可协议

如何正确初始化它?

 std::set<YourType> set;

唯一的条件是 YourType 必须具有 bool operator<(const YourType&) const 并且可以复制(默认构造函数 + 赋值运算符)。对于 std::vector 可复制就足够了。

如何正确插入它们。

 set.insert(my_elem);

如何从集合中获取特定对象(例如对象,其中包含名称变量,等于“ben”)?

这也许就是重点。一个集合只是一堆对象,如果你可以检查一个对象是否在里面或遍历整个集合。

原文由 Johan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题