gpt4 book ai didi

c++ - 将元素插入到 std::set 会导致几个错误

转载 作者:太空狗 更新时间:2023-10-29 23:46:01 25 4
gpt4 key购买 nike

考虑下面的类

#include <set>
#include <vector>
using namespace std;
class foo {
public:
struct spatial {
bool block;
char status; // H, M, Z
};

typedef pair< int, vector<spatial> > way; // tag + spatial vector
typedef set< way > one_set;


void bar()
{
way theWay;
theWay.first = 10;

one_set theSet;
one_set::iterator sit = theSet.end();
if (theSet.size() == 16) {
sit = theSet.begin();
}
theSet.insert(sit, theWay);
}
};

对于插入函数,我收到这些错误,我不知道那是什么意思

error C2784: 'bool std::operator <(const std::vector<_Ty,_Ax> &,const std::vector<_Ty,_Ax> &)' : could not deduce template argument for 'const std::vector<_Ty,_Ax> &' from 'const foo::spatial'    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility

error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const foo::spatial' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

error C2784: 'bool std::operator <(const std::unique_ptr<_Ty,_Dx> &,const std::unique_ptr<_Ty2,_Dx2> &)' : could not deduce template argument for 'const std::unique_ptr<_Ty,_Dx> &' from 'const foo::spatial' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'const foo::spatial' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'const foo::spatial' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'const foo::spatial' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

error C2676: binary '<' : 'const foo::spatial' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility 3144

卡在这一步。感谢任何帮助。

最佳答案

你的 way类型必须有 operator<定义为在 std::set 中使用.

std::pairoperator<如果两种类型都有 operator< . intoperator< ,没关系,但是vector<spatial>operator<仅当其元素类型为 operator< 时.你的spatial类没有,因此你的 way typedef 没有 operator<

创建一个 operator<为你的 spatial上课,你没事。

如果你认为spatial类不应该是可比较的,但坚持有 way在集合中,您还可以创建自己的比较器(一个带有两个 const way& 参数的仿函数/lambda,如果第一个小于第二个则返回 true)并将其作为集合的第二个模板参数传递。

无论如何,因为std::set存储其排序的元素,要使用它,您必须在某个时候定义元素的顺序。

关于c++ - 将元素插入到 std::set 会导致几个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com