我正在尝试将 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 中,它也会返回一个空迭代器。
我的代码有什么问题吗?
最佳答案
vecCompare
不是总排序。如果左操作数中的任何坐标小于右操作数中的对应坐标,则返回 true
。对于 vector 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;
}
关于c++ - Eigen :std::set 与 VectorXd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337529/