LINUX.ORG.RU

Может быть все-таки вам нужен другой контейнер?

CrossFire ★★★★★
()
    foreach (const QPair<QString, int> &value, a){
        if (value.first == myStr){
            doSomething();
        }
    }
heaven__12
()
QList<QPair<QString, int>> list;
// ...
find_if(list.begin(), list.end(), [] (const QPair<QString, int>& pair) {
    if (pair.first == "???" ) {
        return true;
    }
});
DarkEld3r ★★★★★
()

в вузике теперь кути проходят?

matrixd
()

Если нужен поиск без полного перебора, то используй QMap/QHash или заранее сортированный по первому элементу пары список, чтобы использовать бинарный поиск.

Если тебе обязателен порядок включения элементов в список, то тут только медленный полный перебор.

Можно правда сделать такой костыль: есть твой список и есть QMap< QString, int >, где значение - это индекс элемента в QList.

grondek
()
std::find_if(
    list.begin(), 
    list.end(), 
    [&string](const QPair<QString, int>& el) -> bool
    {
        return el.first == string;
    }
);
trex6 ★★★★★
()
Ответ на: комментарий от grondek

Я не знаю, как реализован QList, но разве список, как структура данных, предполагает обращение по индексу?

t1nman
()
Ответ на: комментарий от anonymous

Проблема, как обычно, в том, что туда, где нужно использовать vector/map/etc, пихают list (ненуачо, по индексу то можно обращаться)

t1nman
()
Ответ на: комментарий от t1nman

Проблема, как обычно, в том, что туда, где нужно использовать vector/map/etc, пихают list

Тебе правильно намекают: QList - не совсем (не всегда) привычный список. Если размер элемента меньше указателя, то они будут хранится в последовательном куске памяти, прямо как в векторе.

Хотя выбор ТС мне тоже не понятен.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

почитал про QList, оказывается это массив из элементов/указателей, лол.
пойду дальше читать, вдруг у них там вектор на списках реализован.

t1nman
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.