对向量的整数元素进行排序

Posted

技术标签:

【中文标题】对向量的整数元素进行排序【英文标题】:Sorting integer elements of a vector 【发布时间】:2012-09-02 16:00:46 【问题描述】:

我想计算存储在向量中的元素的中位数

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;

 ....
 ....
 ....

vector<int> trmVa;
int size;
int median;
int trimVal;

trmVa.push_back(trimVal);
size = trmVa.size();
sort(trmVa.begin(), trmVa.end()); //I am having troubles here!!!!

if(size % 2) 
  median = (trmVa[size/2 - 1] + trmVa[size/2]) /2;
  printf("Module %d \n\n \t Median = %d\n", mod, median); 
else 
   median = trimVa[size/2];
   printf("Module %d \n\n \t Median = %d\n", mod, median);

错误:运算符 - 未为向量 >::iterator algo.h:722 定义。感谢您的帮助。

【问题讨论】:

@tuğrulbüyükışık 他正在使用 std::sort sort 的调用看起来不错。但是如果你想要的只是中位数,你可以使用std::nth_element。事实上,你的标题应该反映你想做什么,而不是你认为应该怎么做。 这个compiles for me。修复变量名后。显示你的真实代码。 @fclopez:您的其他问题是否得到了满意的回答?考虑将其中一些标记为正确。 【参考方案1】:

您可以使用std::nth_element 更有效地解决此问题。这只会对向量进行部分排序,并且具有线性复杂度。这是一个奇数向量的例子:

size_t midIndex = trmVa.size()/2;
nth_element(trmVa.begin(), tmrVa.begin() + midIndex, trmVa.end());

中值为

trmVa[midIndex];

您可以轻松地扩展它以覆盖偶数大小的向量。

【讨论】:

以上是关于对向量的整数元素进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中给出两个整数向量(相同的大小和类型),我想从最小到最大的元素对一个进行排序并更改第二个向量的顺序[重复]

根据关联的整数向量对字符串向量进行排序[重复]

使用字符串和整数对对向量进行排序

C ++:对矢量进行排序 (其中struct有2个整数)基于struct [duplicate]的整数之一

C++ 冒泡排序升序 - 不对所有元素进行排序

如何使用现有的整数排序对整数元组进行排序?