Как я могу проверить, все ли элементы вектора находятся внутри другого вектора в Eigen C ++? - PullRequest
0 голосов
/ 24 февраля 2020

Как я могу проверить, все ли элементы вектора находятся внутри другого вектора в Eigen c ++? Или, другими словами, как я могу проверить, что вектор включен в другой или является подмножеством другого вектора в Eigen C ++?

т.е.

Если

Eigen::Matrix<Index, Eigen::Dynamic, 1>  activeset <<0,1,2,3,4,5; 

Eigen::Matrix<Index, Eigen::Dynamic, 1>  detectedset <<0,1,2,3,4,5,6; 

Тогда активный набор включен в обнаруженный набор

Однако если

Eigen::Matrix<Index, Eigen::Dynamic, 1>  activeset <<0,1,2,3,4,5; 

Eigen::Matrix<Index, Eigen::Dynamic, 1>  detectedset <<0,1,2,3,5,6,7; 

Тогда активный набор не включается в обнаруженный набор, так как в обнаруженном наборе отсутствует 4, которая находится внутри активного набора.

Есть ли в eigen c ++ функция, которая может это сделать? Или как мы можем это сделать?

1 Ответ

0 голосов
/ 25 февраля 2020

В ветви разработки Eigen (и в следующей версии 3.4) вы можете получить доступ к объектам Eigen с помощью итераторов, совместимых с алгоритмами std, например, вы можете просто написать:

std::includes(detectedset.begin(), detectedset.end(), activeset.begin(), activeset.end())

Полная работа демо: https://godbolt.org/z/kguGjW.

Обратите внимание, что std::include требует сортировки обоих диапазонов (что можно сделать с std::sort, если необходимо). Также обратите внимание, что для этой цели нет особой выгоды использовать Eigen::Matrix<Index, Dynamic, 1> вместо простого std::vector<Eigen::Index> (хотя, возможно, у вас есть причины, помимо этого вопроса, использовать Eigen::Matrix здесь).

...