c++ - Eigen :std::set 与 VectorXd

标签 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 中,它也会返回一个空迭代器。

我的代码有什么问题吗?

最佳答案

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/

相关文章:

采用 args Eigen 稀疏矩阵的 C++ 函数

c++ - 将 Eigen::VectorXd 展开为 Eigen::MatrixXd

c++ - ARRAYSIZE C++ 宏 : how does it work?

c++ - 为什么要使用断言?

matlab - Eigen C++ 中数学表达式的内联计算

c++ - Eigen conservativeResize 奇怪的行为

c++ - 编译时 Eigen 断言错误,不清楚的错误

c++ - 比较 IPV4 套接字 (sockaddr_in) 和 IPV6 套接字 (sockaddr_in6)

c++ - 将字符串的大写字母转换为小写字母,反之亦然

c++ - 如何使用 vscode 增加 C++ 中的最大堆栈大小