Я пытаюсь клонировать класс std :: map в c ++;Я использую std :: vector, который хранит std :: pair. И сейчас я реализую оператор []. Я сделал два определения, одно - const для доступа без изменения, а другое - не const.
При компиляции он говорит, что нет никакой разницы.
Это объявления: Использование этого шаблона:
template<class TClau, class TValor>
TValor& operator[](const TClau& clau);
const TValor& operator[](const TClau& clau);
И вот эти определения:
//m_map is the actual vector with pairs.
template<class TClau, class TValor>
TValor& Map<TClau, TValor>::operator[](const TClau& clau) {
int l = 0, r = m_length - 1;
int m;
if (r >= l) {
while (r >= l) {
m = l + (r - l) / 2;
if (m_map[m] == clau)
return m_map[m].second;
if (m_map[m] > clau)
r = m - 1;
l = m + 1;
}
}
return TValor;
}
template<class TClau, class TValor>
const TValor& Map<TClau, TValor>::operator[](const TClau& clau) {
int l = 0, r = m_length - 1;
int m;
if (r >= l) {
while (r >= l) {
m = l + (r - l) / 2;
if (m_map[m] == clau)
return m_map[m].second;
if (m_map[m] > clau)
r = m - 1;
l = m + 1;
}
}
return aux;
}
Я был бы признателен, если бы кто-то мог помочь мне с этим.