Вопрос

Я хочу что-то вроде std:: карта, но я только хочу посмотреть, существует элемент или нет, на самом деле мне не нужны ключ И значение.Что я должен использовать?

Это было полезно?

Решение

Похоже, тебе нужен std:: установить.

Другие советы

Если вы хотите такого же поведения, как std::map, тогда вы хотите std::set.

Если вы смешиваете операции вставки / удаления и запроса, то std::set вероятно, это лучший выбор.Однако, если вы можете сначала заполнить набор, а затем следовать за ним с помощью запросов, возможно, стоит рассмотреть возможность использования std::vector, сортируя его, а затем используя двоичный поиск для проверки наличия в векторе.

Если вам действительно нужно только существование, и даже не порядок, вам нужен unordered_set.Он доступен у вашего любимого поставщика C ++ 0x или boost.org.

Если ваши данные числовые, вы можете использовать std::vector, который оптимизирован для пространства:

D:\Temp>type vectorbool.cpp
#include <iostream>
#include <vector>

using namespace std;

int main() {
        vector<bool> vb(10);
        vb[5] = true;

        for (vector<bool>::const_iterator ci = vb.begin(); ci != vb.end(); ++ci) {
                cout << *ci << endl;
        }
}

D:\Temp>cl /nologo /W4 /EHsc vectorbool.cpp
vectorbool.cpp

D:\Temp>vectorbool.exe
0
0
0
0
0
1
0
0
0
0

Вероятно, вам следует взглянуть на stl::set для того, что вам нужно.A stl::bitset есть еще один вариант.

Это будет зависеть от того, как вам нужно использовать информацию, которая определит, какой из них лучше.A set представляет собой отсортированную структуру данных, вставка, поиск и удаление которой занимают O (LOG N) времени.Но если вам нужно повторять по всем значениям, которые вы отметили для "существования", тогда set это тот путь, по которому нужно идти.

Если вам нужно только отметить и выполнить поиск по факт если что-то является членом множества, то bitset может быть, так будет лучше для тебя.Вставка, поиск и удаление занимают всего O (1), но вы можете собирать только int ценности.Перебор всех отмеченных значений займет O (N), поскольку вам нужно просмотреть весь набор, чтобы найти элементы, для которых установлено значение true.Вы можете использовать его совместно с stl::карта чтобы сопоставить имеющиеся у вас значения с числовыми значениями, bitset потребности.

Посмотрите на операции, которые вам нужно выполнить со значениями в вашем наборе, и вы сможете выбрать соответствующую структуру данных

Вы можете продолжать использовать std::map для нужной цели.

Чтобы проверить, существует ли определенный элемент (типа ключа) на карте или нет, вы можете использовать следующий код:

if (mapObj.count(item) != 0)
{
   // item exists
}

Как отвечалось ранее, std::set также выполнит эту работу.Интересно, что и set, и map внутренне представлены в виде Деревьев.

Если ключом ЯВЛЯЕТСЯ значение, то вы также можете рассмотреть "фильтр цветения", а не набор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top