好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
c++排序和索引的记录 关闭 返回上一级  

c++排序和索引的记录
+ 查看更多

发布日期:2018-02-26 14:22
分类:CPlusPlus
浏览次数:84
使用C ++,希望是标准库,我想按升序对一系列样本进行排序,而且我也想记住新样本的原始索引。
例如,我有一个集合,或者向量或矩阵的样本:[5、2、1,4,3]。我想把这些排序为B:[1,2,3,4,5],但我也想记住值的原始索引,所以我可以得到另一个集合,它将是:C:[2,1 ,4,3,0] - 其对应于原始“A”中的“B”中的每个元素的索引。
例如,在Matlab你能这样做:
[a,b]=sort([5, 8, 7])
 a = 5 7 8
 b = 1 3 2
任何人都可以看到一个好的方法做到这一点吗?

回答

使用c++中的希腊字母λ
template 
vector sort_indexes(const vector &v) {

  // initialize original index locations
  vector idx(v.size());
  iota(idx.begin(), idx.end(), 0);

  // sort indexes based on comparing values in v
  sort(idx.begin(), idx.end(),
       [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}
现在你可以使用返回的索引向量进行迭代,例如
for (auto i: sort_indexes(v)) {
  cout << v[i] << endl;
}
显然,你还可以选择提供你自己的原始索引向量,排序函数,比较器,或使用sort_indexes函数中一个额外向量v自动重新排序。
 
 
上一篇使用字符串分隔符(标准C ++)解析(拆分)C++中的字符串
如何把char*转换为std::string类型下一篇
下一篇如何把char*转换为std::string类型

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号