将矢量排序为分叉偶数和奇数

时间:2015-08-04 13:39:10

标签: c++ c++11 vector stl

我正在尝试使用sort对矢量进行排序,以便将所有偶数和奇数组合在一起但不知何故似乎无法正常工作。

以下示例代码。

#include <iostream>     
#include <algorithm>    
#include <vector>       

bool myfunction (int i,int j) { return ((i&2)>(j&2)); }
bool yourfunction (int i,int j) { return (i<j); }



int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);              
  int count=0;
  // using function as comp
  std::sort (myvector.begin(), myvector.end(), myfunction);
    for (std::vector<int>::iterator it=myvector.begin();it!=myvector.end(); ++it)
  std::cout << ' ' << *it;
  std::cout << '\n';
 for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
 {
      if(((*it)&2)==0)
      {
          break;
      }
      count++;
  }
    std::cout << "myvector contains after 1st sort:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
   std::cout << ' ' << *it;
  std::cout << '\n';
  std::sort (myvector.begin()+count, myvector.end(), yourfunction);
    // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
   std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

2 个答案:

答案 0 :(得分:9)

您可以使用std::partition功能执行此操作。

auto oddStart = std::partition(std::begin(myints),
                               std::end(myints),
                               [](int i){ return i % 2 == 0; });

在此之后你的偶数值来自

for(auto it = std::begin(myints); it != oddStart; ++it)

,赔率

for(auto it = oddStart; it != std::end(myints); ++it)

答案 1 :(得分:1)

如果您想坚持使用std::sort,可以使用此功能:

bool myfunction (int i,int j) { return ((i % 2) > (j % 2)); }

使用您的输入结果运行sort

71
45
53
33 //ODD
32 //EVEN
12
26
80