从无序映射创建以自定义类为键的映射。但是由于const

时间:2016-12-15 00:33:41

标签: c++ comparator unordered-map

我正在尝试将包含我的无序地图的元素映射到包含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问题是否仍然存在。

1 个答案:

答案 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类方法,则不应该有任何问题。