Подтвердить что ты не робот

Получить индекс элемента на С++-карте

У меня есть std::map, называемый myMap в моем приложении С++, и я хочу получить элемент, используя либо myMap.find(key), либо myMap[key]. Тем не менее, я хотел бы также получить индекс этого элемента на карте.

std::map<string, int> myMap;
// Populate myMap with a bunch of items...
myElement = myMap["myKey"];
// Now I need to get the index of myElement in myMap

Есть ли чистый способ сделать это?

Спасибо.

4b9b3361

Ответ 1

A std::map на самом деле не имеет индекса, вместо этого он имеет итератор для пары ключ/значение. Это похоже на индекс в том, что он представляет собой позицию рода в коллекции, но не является числовой. Чтобы получить итератор пары ключ/значение, используйте метод find

std::map<string, int>::iterator it = myMap.find("myKey");

Ответ 2

Я пришел сюда, ища этот ответ, но я нашел это функция расстояния принимает 2 итератора и возвращает индекс

cout << distance(mymap.begin(),mymap.find("198765432"));

надеюсь, что это поможет: D

Ответ 3

Хорошо - карта хранит ключ, а данные - как пара поэтому вы можете извлечь ключ, переделав итератор карты в пару или непосредственно в первый элемент пары.

std::map<string, int> myMap;
std::map<string, int>::iterator it;

for(it=myMap.begin();it!=myMap.end();it++)
{
    std::cout<<it->first<<std::endl;
}

Ответ 4

Если ваша карта уже исправлена ​​(впоследствии вы не добавили/не удалили какой-либо ключ), и вы хотите получить из нее индекс. Вы можете сделать следующее:

Создайте массив, в котором хранятся ключи всей вашей карты. И там у вас есть ключи, доступные по индексу!

vector<int> keys;
for (pair<K,V> entry : yourMap) {
    keys.push_back(entry.first);
}

И что это. Чтобы получить доступ к индексу i вашей карты, используйте yourMap[keys[i]]

Преимущество этого метода над функцией distance - временная сложность. Он O(1) гарантирован.

Ответ 5

В карте нет такой вещи, как индекс. Карты не сохраняются (не обязательно, по крайней мере, и действительно, они не в большинстве реализаций) в виде последовательности "пар".

Однако, несмотря на реализацию, std:: map не моделирует контейнер с индексом.

В зависимости от того, на что вы задаете этот вопрос, "индекс" может быть итератором (как это было предложено другими) или самим ключом.

Однако, это звучит странно, что вы задали этот вопрос. Если вы можете дать нам немного больше информации, мы, вероятно, сможем указать вам на лучшее решение вашей проблемы.

Ответ 6

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

Ответ 7

Карта - это структура данных с ключом, которая внутренне передает данные в древовидной структуре. Существует O (n) решение, указанное выше. "distance (mymap.begin(), mymap.find(" 198765432 "))" не принесет вам правильного ответа. Для вашего требования вы должны создать собственную структуру данных типа дерева сегментов для конкурентных операций O log (n).