2016-12-15 4 views
0

私は、クラスT、int、および比較クラスであるsortByを含むマップに含まれる順序付けられていないマップから要素をマップしようとしています。順序付けられていないマップからカスタムクラスをキーとしてマップを作成します。しかし、constのために使用できない要素

しかし、私はマップ内のどの要素でも何も実行できません。それらはすべてconstですから。私はそれらをconstにしない方法や、なぜ彼らが最初にconstだったのか分かりません。

unordered_map < int,LibrarySong> Library; 
map < LibrarySong,int, LibrarySong:: sortbyPlay> sortedLibrary; 

for(unordered_map<int,LibrarySong>:: iterator it = Library.begin(); it != Library.end(); ++it){ 
    sortedLibrary.insert(pair <LibrarySong,int> (it->second, it->first)); 
} 
for(map < LibrarySong,int>::iterator it=sortedLibrary.begin(); it != sortedLibrary.end(); ++it){ 
    cout << it->first.print() << endl; //Cant do anything because it is const 
}; 

LibrarySongsヘッダーが構造

struct sortbyPlay { 
    bool operator() (const LibrarySong &lhs ,const LibrarySong &rhs) const{ 
     return lhs.numPlay < rhs.numPlay; 
    } 
}; 

を持っている私は、関数でのconstを削除しようとしたが、それはどちらか動作しませんか?

おそらくもっと良い方法がありますが、わかりません。私はベクトルを考えていて、sort()を使っていましたが、両方の値が必要でした(恐らくペアを使うことができますか?)しかし、constの問題が依然として続くかどうかはわかりません。

+0

私はあなたが物事を不必要に複雑にしているように見えます。あなたのunordered_mapは、intとしてキーを使用し、Librarysongインスタンスを値として使用します。あなたのマップはその周辺を切り換え、特別なコンパレータを使用します。 numPlayはintですか?もしそうなら、それをキーのままにして、あなたが望むソートを得るのではなく、LibrarySongはもはやconstではありません。 – tinstaafl

答えて

0

マップのコンパレータのconstの精度はまったく関係ありません。

cout << it->first.print() << endl; //Cant do anything because it is const 

マップのキーは、first値は、常にconstです。そのため、クラス内のprint()メソッドはconstメソッドでなければなりません。あなたの質問は全くminimal, complete, and verifiable exampleを提供できませんが、print()メソッドはconstメソッドでなければならないことは明らかです。

print()などのクラスメソッドは、そのオブジェクトを変更する必要はありません。少なくとも穏やかなクラスのデザインではない。したがって、print()メソッドをconstクラスメソッドとして宣言する際に問題はありません。

関連する問題