如何解决如何使用C ++在matlab中实现唯一行为?
在Matlab中,[C,ia,ic] = unique(A)
函数返回一个已排序的数组C
,其中删除了A
中的重复项,并且ia
和ic
数组包含索引C = A(ia) and A = C(ic)
。例如:
A = [1,2,3,-1,-2,4];
[C,ic] = unique(A);
C = [-2,1,4];
% The indices are incremented by 1 to accomodate the C++ convection.
ia = [4,7,8]; % size(ia) = size(C)
ic = [3,4,5,6]; % size(ic) = size(A)
这是我的实现方式
std::vector<int> A = {1,4};
std::set<int> C(A.begin(),A.end());
std::vector<int> ic;
ic.reserve(A.size());
std::transform(A.begin(),A.end(),std::back_inserter(ic),[&](int x) { return (std::distance(C.begin(),C.find(x))); });
我现在可以正确获取数组C和ic,但是我不知道如何获取数组ia。
有人可以帮我吗?
解决方法
答案与您计算ic
的方式非常相似。只需在A
通话中交换C
和transform
:
std::vector<int> ia;
ia.reserve(C.size());
std::transform(C.begin(),C.end(),std::back_inserter(ia),[&](int x) { return std::distance(A.begin(),std::find(A.begin(),A.end(),x));
});
您还需要使用std::find
,因为std::vector
不提供.find()
成员函数。
另一种语法与Matlab相似的方法:
#include <algorithm>
#include <vector>
std::vector<int> A = {1,2,3,-1,-2,4};
std::vector<int> B (A.begin(),A.end());
std::sort(B.begin(),B.end());
auto last = std::unique(B.begin(),B.end());
B.erase(last,B.end());
如果要查找条目位置的索引,可以使用find_first_of
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。