C ++:如何将向量中包含的对象插入到集合中?

时间:2016-08-21 04:48:39

标签: c++ vector stl insert set

我有一个对象向量,我试图将每个对象复制到一个集合中:

std::set<MinTreeEdge>minTreeOutputSet;
for(std::vector<MinTreeEdge>::iterator it = minTreeOutput.begin(); it != minTreeOutput.begin(); ++it)
        minTreeOutputSet.insert(*it);

这给了我一个错误,即在插入调用中缺少某种比较(运算符&lt;&#39; __ x&lt; __y&#39; |)。我试过了

minTreeOutputSet.insert(minTreeOutput[it]);

同样,但这给了我一个错误,即操作符[]没有匹配。

是否将对象插入到不允许的集合中?如何将矢量中的对象正确插入到集合中?

1 个答案:

答案 0 :(得分:4)

你说:

  

这给了我一个错误,某种比较(运算符&lt;&#39; in   &#39; __ x&lt;调用insert

时缺少__y&#39; |)

因此,您应为operator<定义MinTreeEdge或将您自己的比较可调用类型作为std::set<>的第二个模板参数传递。

以下是两种方法的示例代码:

#include <set>

struct A
{
    // approach 1: define operator< for your type
    bool operator<( A const& rhs ) const noexcept
    {
        return x < rhs.x;
    }

    int x;
};

struct B
{
    int x;
};

struct BCompare
{
    // approach 2: define a comparison callable
    bool operator()( B const& lhs, B const& rhs ) const noexcept
    {
        return lhs.x < rhs.x;
    };
};

int main()
{
    std::set<A> sa; // approach 1
    std::set<B, BCompare> sb; // approach 2
}

除非您无法修改类型的定义,否则我建议使用方法1。