Eigen: std :: set с VectorXd

0

Я пытаюсь использовать std::set вместе с VectorXd из библиотеки Eigen:

typedef VectorXd Vec;

bool(*fn_pt)(Vec,Vec) = vecCompare;
set<Vec,bool(*)(Vec,Vec)> yx (fn_pt);

Функция vecCompare ist определяется следующим образом:

bool vecCompare (Vec v, Vec w) {
  for (int i = 0; i < numCrit; ++i) {
    if (v(i) < w(i)) return true;
  } 

  return false;
 }

Unfortunality, yx.find(x) работает некорректно, т.е. Возвращает пустой итератор, даже если x уже находится в yx.

Что-то не так с моим кодом?

  • 0
    Является ли numCrit == v.rows()== w.rows() )?
  • 0
    Да это правда.
Теги:
eigen

1 ответ

1
Лучший ответ

vecCompare не является полным заказом. Он возвращает true если любая координата в левом операнде меньше соответствующей координаты в правом операнде. Для векторов a = (1, 2), b = (2, 1), например, vecCompare(a, b) как 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню