2016-05-09 6 views
0

In diesem Programm versuche ich, {0, 1, 0, 1, 1, 1} neu anzuordnen und die Reihenfolge {0,0,1,1,1 1}.Inhalt der Karte wird nicht auf bestimmte Weise gedruckt

#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; 
} 

Das Problem, das ich bin vor, daß die Karte korrekt eingesetzt wird immer, und das Problem liegt, während die Karte aus Drucken, so dass die Anordnung in einer getrennten Art und Weise neu angeordnet wird. Ich kann nicht herausfinden, was mit dem Code falsch läuft. Ich habe den Arbeitscode gegeben. Kann jemand darauf hinweisen, was der Fehler ist?

+0

Sie die "Input" gezeigt und die erwartete "Output", aber was ist der * Ist * ausgegeben? Haben Sie versucht, den Code in einem Debugger zu durchlaufen? –

+0

Übrigens brauchen Sie das 'find' oder' if..selse' nicht. Just 'memap [arr [i]] ++' sollte gut funktionieren ("Indizierung" einer Karte erstellt das Element, wenn es nicht existiert, mit einem Standardwert, der Null für 'int' ist). –

+0

Ich habe den Fehler erhalten. Ich habe nicht den korrekten C++ - Compiler benutzt, als ich (-std = C++ 11) benutzt habe, dann hat es funktioniert. Danke für Anregungen. – crash

Antwort

1

In diesem Programm I {0, 1, 0, 1, 1, 1} und drucken die Reihenfolge {0,0,1,1,1,1} neu zu ordnen versuchen.

aus Ihren Worten müssen Sie sortelements des array. Sie können std::sort Funktion:

#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; 
} 

Ausgang:

Before 
0 1 0 1 1 1 
After 
0 0 1 1 1 1