2014-09-09 1 views
1

Мне нужно знать в QMap второе значение есть. Функции, подобные first() и last(), бесполезны. Должен ли я использовать итератор, какой-то цикл?Как найти определенное значение в Qmap

QMap<int, QString> map; 
map.insert(1, "Mario"); 
map.insert(2, "Ples"); 
map.insert(3, "student"); 
map.insert(4, "grrr"); 

ответ

1

Карта обеспечивает быстрый доступ на основе ключа (первый аргумент).

Так что, да, если вы хотите знать, если значение существует (второй аргумент), вам нужно будет перебирать значения карты: -

bool ValueExists(const QMap<int, QString> map, const QString valExists) 
{ 
    QList<QString> valuesList = map.values(); // get a list of all the values 
    foreach(QString value, valuesList) 
    { 
     if(value == valExists) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Для упрощения кода, можно также использовать метод значений contains(), который внутренне будет перебирать значения, как указано выше.

4

Если вы нашли конкретный ключ или значение, которое вы можете что-то вроде этого:

// Returns 1 
int key1 = map.key("Mario"); 

// returns "student" 
QString value3 = map.value(3); 

или вы хотите перебрать все элементы в QMap?

5

Вам не нужно перебирать элементы. Сначала получите все значения через values(), а затем используйте .

bool ValueExists(const QMap<int, QString> map, const QString valExists) const 
{ 
    return map.values().contains(valExists); 
}