将对象插入集合中

时间:2010-03-03 15:25:19

标签: c++

我想将一个向量插入到这样的集合中:

set<vector<prmEdge> > cammini;
vector<prmEdge> vecEdge;
cammini.insert(vecEdge);

我有一个像这样的编译错误:

prmPlanner.cpp:1285:   instantiated from here
/usr/include/c++/4.2/bits/stl_algobase.h:853: error: no match for ‘operator<’ in ‘__first1.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const prmEdge*, _Container = std::vector<prmEdge, std::allocator<prmEdge> >]() < __first2.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const prmEdge*, _Container = std::vector<prmEdge, std::allocator<prmEdge> >]()’
/usr/include/c++/4.2/bits/stl_algobase.h:855: error: no match for ‘operator<’ in ‘__first2.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const prmEdge*, _Container = std::vector<prmEdge, std::allocator<prmEdge> >]() < __first1.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const prmEdge*, _Container = std::vector<prmEdge, std::allocator<prmEdge> >]()’
make[1]: *** [prmPlanner.o] Errore 1

我该怎么办? 有人能帮助我吗?

非常感谢

6 个答案:

答案 0 :(得分:5)

它不知道如何比较矢量。您应该为operator<提供vector<prmEdge>(或prmEdge为向量自动使用std::lexicographical_compare),或者如果您实际上不需要排序集,则使用unordered_set载体

答案 1 :(得分:1)

由于set中的元素是vector,而且未定义operator<,因此您需要执行以下两项操作之一:围绕{{1}编写包装器定义vector,或者编写比较仿函数,并在创建集合时将其作为参数提供。

答案 2 :(得分:0)

集合中包含的对象必须定义operator <

答案 3 :(得分:0)

std::set需要对其条目进行排序。但std::vector无法排序。

答案 4 :(得分:0)

std::set需要一个谓词来排序元素。默认情况下为<,因此您需要为operator <定义vector<prmEdge>。您也可以向std::set提供自定义谓词,请参阅here

答案 5 :(得分:0)

同意之前的答案,只想添加您可以创建全局bool operator<(vector<T> v)