Eigen:std ::使用VectorXd设置

时间:2014-12-06 22:56:08

标签: c++ eigen

我正在尝试将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中,它也会返回一个空的迭代器。

我的代码有什么问题吗?

1 个答案:

答案 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;
}