视觉C 由于comperator提供了映射异常
Visual C++ throws map exception because of comperator
我有一个在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));
}
};
在Windows上运行代码时,我会收到以下错误:
debug断言失败了! 当我将比较器更改为仅一个条款时,它有效:
struct dependenceCompare {
bool operator() (const dependence& lhs, const dependence& rhs) const{
return ((lhs.CUid < rhs.CUid));
}
};
我已经阅读了此线程,但无法确定问题在哪里以及为什么它在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;
这可能更像是您想要的:对一个字段的优先级,但使用另一个字段打破领带。
您可以使用std::tie
return (std::tie(a.i, a.j, a.k) < std::tie(b.i, b.j, b.k));
对于您的代码,将是:
return ( std::tie(lhs.CUid, lhs.source, lhs.sink, lhs.var)
< std::tie(rhs.CUid, rhs.source, rhs.sink, rhs.var));
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 处理多个异常集合的C++方法
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- C++中的赋值发生,尽管右侧出现异常
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 视觉C 由于comperator提供了映射异常
- 将C++异常映射到结果
- C++STL映射异常.(不可变树的根)
- 模板类映射构建在stl :: structs的向量上 - 寻找无效的键(stl :: string)并抛出异常
- 函数传递映射时出现异常错误
- 正确尝试/捕获无序映射异常
- 使用SWIG对java进行类型映射异常,仍然没有被捕获
- 尝试向静态映射添加大量元素时出现段故障异常
- SWIG类型映射中的c++异常