У меня есть следующий код, я знаю, что я почти переопределяю контейнер, но я хочу сделать так, у меня будут более конкретные методы, и я не хочу повторять код для мультикарт разных типов:
template<class TYPE>
class MapTemplate {
public:
typedef typename std::unordered_multimap <QString, QString>::iterator iterator;
void addElement(const QString& elementName, const TYPE& T) {
unorderedMultiMap.insert(std::make_pair<QString, TYPE>(elementName, T));
}
std::pair<iterator, iterator> getEqual_range(const QString& elementName) {
return unorderedMultiMap.equal_range(elementName);
}
int removeElement(const QString& elementName) {
return unorderedMultiMap.erase(elementName);
}
int getNumberOfElements() const {
return unorderedMultiMap.size();
}
bool isMapEmpty() const {
return unorderedMultiMap.isEmpty();
}
iterator isElementInMap(const QString& elementName) const {
return unorderedMultiMap.find(elementName);
}
private:
std::unordered_multimap<QString, TYPE> unorderedMultiMap;
};
У меня есть два вопроса: если я попытаюсь userProgMap.addElement(userName, programName);
быть MapTemplate<QString> userProgMap
и userName & programName и QString , я получаю сообщение об ошибке, в котором не может преобразовать аргумент из QString в _Ty1 &&.
С другой стороны, как у меня может быть такой итератор:
typedef typename std::unordered_multimap <QString, TYPE>::iterator iterator;
Возможно ли это?Это также показывает ошибку, я должен использовать <QString, QString>
Спасибо.