2014-09-13 3 views
2

Я пытаюсь реализовать карту, используя список, сопоставляемый с шаблоном.Реализация карты с использованием двусвязного списка

Я пытаюсь написать функцию ПОЛУЧАЕТЕ:

valueType get (keyType key, bool & success) const; 
  • Возвращает значение, связанное с данным ключом.

  • Если ключ существовал на карте, успех должен быть установлен в true.

  • Если ключ не имеет ассоциации, он должен установить успех на false.

Функция прибудет будет использоваться для пользователя, чтобы получить доступ к карте, а также для add() и remove() функций, которые хотят, чтобы проверить, действительно ли существует связь между данным ключом и значением.

Я смущен тем, что возвращаю, если значение не существует? Поскольку эта функция возвращает тип valueType

+0

Вы можете вернуть построенный по умолчанию 'valueType'. – jxh

+1

Я бы сделал это наоборот, вернул bool на успех: 'bool get (const keyType & key, valueType & value) const;'. – Galik

+0

Не нужно ли мне возвращать тип значения, если я нахожу значение? @ Galik –

ответ

2

Я хотел бы сделать это наоборот, как это (часть псевдокоде):

bool get(const keyType& key, valueType& value) const 
{ 
    // search for value 
    if(/*value found*/) 
    { 
     value = /*found value*/; // set parameter to found value 
     return true; 
    } 
    return false; // leave value unchanged 
} 

Используйте функцию как это:

valueType value; 

if(get("key", value)) 
{ 
    // we know key was found and value was set 
} 
else 
{ 
    // we know key was not found and value is unchanged 
} 
0

Вы можете обратиться к STL map, operator[ ] похож на вашу функцию get, и вы можете реализовать свою функцию, вставив ключ в карту, если ключ не существует сейчас, а значение ключа является значением по умолчанию (suc h как 0 для int, "" для строки).

Редактировать: Извините за мою ошибку, я думаю, что ваша функция get аналогична функции find, а не operator[]. Вы можете вернуть позицию ключа на карте, и если ключ не существует, просто верните недопустимую позицию.

Если мое выражение не ясно из-за моего английского языка, ответьте мне.

Смежные вопросы