Cod*_*ope 0 c++ linux visual-studio
我有一个在Linux上运行的C++代码,但我在Windows上遇到了Visual C++的错误.代码如下:
struct dependence {
dependence() {}
dependence(string CUid, LID sink, LID source, std::string var)
: CUid(CUid), sink(sink), source(source), var(var) {}
string CUid;
LID sink = 0;
LID source = 0;
std::string var;
};
struct dependenceCompare {
bool operator() (const dependence& lhs, const dependence& rhs) const{
return ((lhs.CUid<rhs.CUid) || (lhs.source<rhs.source) || (lhs.sink < rhs.sink) || (lhs.var < rhs.var));
}
};
Run Code Online (Sandbox Code Playgroud)
在Windows上运行代码时,我收到以下错误:
调试断言失败!"c:\ windows\system32\MSCP120D.dll c:\ Program Files\Microsoft Visual Studio 12.0\VC\include\xtree line 1795表达式:无效运算符<当我将比较器更改为只有一个if子句时,它作品:
struct dependenceCompare {
bool operator() (const dependence& lhs, const dependence& rhs) const{
return ((lhs.CUid < rhs.CUid));
}
};
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个帖子,但是无法找到问题所在,以及为什么它在Linux中使用cmake而不是在Visual Studio C++中.
类似的东西a.i < b.i || a.j < b.j并不像"严格的弱排序"那样std::map,因为它意味着给定两个项目,每个项目可以比另一个项目少.
通常会看到这种形式的多场比较:
if(a.i != b.i) return a.i < b.i;
if(a.j != b.j) return a.j < b.j;
return a.k < b.k;
Run Code Online (Sandbox Code Playgroud)
这可能更像你想要的:给一个领域优先,但使用另一个领域打破关系.
您可以使用简化代码 std::tie
return (std::tie(a.i, a.j, a.k) < std::tie(b.i, b.j, b.k));
Run Code Online (Sandbox Code Playgroud)
对于您的代码,它将是:
return ( std::tie(lhs.CUid, lhs.source, lhs.sink, lhs.var)
< std::tie(rhs.CUid, rhs.source, rhs.sink, rhs.var));
Run Code Online (Sandbox Code Playgroud)