我需要一种方法来排序和删除稀疏矩阵的行和列索引的重复项。 但首先我需要对索引进行排序,然后找到删除重复项的方法。
Eigen::Matrix<std::pair<int, int>, Eigen::Dynamic, Eigen::Dynamic> unsorted_indices;
如何为此编写排序方法?或者我可以同时实现两者的方法。
我可以轻松地通过
实现这一点[…]当未知数增长超过一百万时,事情的成本就非常昂贵std::set<pair<int,int>>
矩阵是错误的数据结构,因为您显然没有使用它的二维结构。如果
std::set
适合您,您可以使用普通的旧 std::vector
#include <algorithm>
std::vector<std::pair<int, int>> indices;
for(...)
indices.emplace_back(row_i, col_j);
std::sort(indices.begin(), indices.end());
indices.erase(std::unique(indices.begin(), indices.end()), indices.end());
indices.shrink_to_fit();
vector
比 std::set
的内存效率更高。 erase(unique(…)
的东西被称为 erase-remove idiom