在这个程序中,我试图重新排列{0,1,0,1,1,1}并打印顺序{0,0,1,1,1,1}。
#include <iostream>
#include <map>
using namespace std;
void segregate0and1(int arr[], int size){
std::map<int,int> mymap;
for (int i = 0; i < size;i++){
std::map<int,int>::iterator it;
//cout<<"Array element"<<arr[i]<<endl;
it = mymap.find(arr[i]);
if (it != mymap.end()){
mymap[arr[i]]++;
}
else{
mymap.insert ( std::pair<int,int>(arr[i],1) );
}
}
cout<<"Printing after segregating"<<endl;
std::map<int,int>::iterator it1;
int j,k;
for (it1=mymap.begin(); it1!=mymap.end(); it1++){
k = it1->first;
j = it1->second;
//cout<<"The value of k is "<<k<<endl;
//cout<<"The value of j is "<<j<<endl;
while (j > 0){
//cout<<"I am inside this";
std::cout<<k<<" ";
j--;
}
}
}
int main()
{
int arr[] = {0, 1, 0, 1, 1, 1};
int arr_size = sizeof(arr)/sizeof(arr[0]);
segregate0and1(arr, arr_size);
getchar();
return 0;
}
我面临的问题是地图正在正确填充,问题出在打印地图时,以便以隔离的方式重新排列数组。我无法弄清楚这段代码出了什么问题。我已经给出了工作代码。有人可以指出错误是什么吗?
答案 0 :(得分:1)
在这个程序中,我试图重新排列{0,1,0,1,1,1}并打印 订单{0,0,1,1,1,1}。
根据您的说法,您需要sort
的{{1}} elements
。
您可以使用array
功能:
std::sort
输出:
#include <algorithm>
#include <iostream>
int main()
{
int arr[] = { 0, 1, 0, 1, 1, 1 };
std::cout << "Before" << std::endl;
for (int nVal : arr)
std::cout << nVal << " ";
std::cout << std::endl;
//Sort it
std::sort(std::begin(arr), std::end(arr));
std::cout << "After" << std::endl;
for (int nVal : arr)
std::cout << nVal << " ";
std::cout << std::endl;
return 0;
}