我想将一个向量插入到这样的集合中:
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
我该怎么办? 有人能帮助我吗?
非常感谢
答案 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)