如何对具有 std::pair<int, int> 的 Eigen::Matrix 进行排序并删除索引的重复项

问题描述 投票:0回答:1

我需要一种方法来排序和删除稀疏矩阵的行和列索引的重复项。 但首先我需要对索引进行排序,然后找到删除重复项的方法。

Eigen::Matrix<std::pair<int, int>, Eigen::Dynamic, Eigen::Dynamic> unsorted_indices; 

如何为此编写排序方法?或者我可以同时实现两者的方法。

sorting matrix eigen
1个回答
0
投票

我可以轻松地通过

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

© www.soinside.com 2019 - 2024. All rights reserved.