地图的内容不会以特定方式打印

时间:2016-05-09 01:08:22

标签: c++ c++11 hashmap

在这个程序中,我试图重新排列{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;
}

我面临的问题是地图正在正确填充,问题出在打印地图时,以便以隔离的方式重新排列数组。我无法弄清楚这段代码出了什么问题。我已经给出了工作代码。有人可以指出错误是什么吗?

1 个答案:

答案 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;
}