我正在尝试将std::set
与来自Eigen库的VectorXd
一起使用:
typedef VectorXd Vec;
bool(*fn_pt)(Vec,Vec) = vecCompare;
set<Vec,bool(*)(Vec,Vec)> yx (fn_pt);
函数vecCompare定义如下:
bool vecCompare (Vec v, Vec w) {
for (int i = 0; i < numCrit; ++i) {
if (v(i) < w(i)) return true;
}
return false;
}
不幸的是,yx.find(x)无法正常工作,即即使x已经在yx中,它也会返回一个空的迭代器。
我的代码有什么问题吗?
答案 0 :(得分:1)
vecCompare
不是总排序。如果左操作数中的任何坐标小于右操作数中的相应坐标,则返回true
。例如,对于向量a =(1,2),b =(2,1),vecCompare(a, b)
和vecCompare(b, a)
都为真。
如果你的意思是字典顺序,这应该有效:
bool vecCompare (Vec v, Vec w) {
for (int i = 0; i < numCrit; ++i) {
if (v(i) < w(i)) return true;
if (v(i) > w(i)) return false;
}
return false;
}