我正在尝试将包含我的无序地图的元素映射到包含Class T,int和sortBy作为比较类的地图。
但是我不能对地图中的任何元素执行任何功能,因为它们都是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 :(得分: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
类方法,则不应该有任何问题。