map вставка с условием

252
19 октября 2018, 23:40

массив

 float v[] = {0.5, 0.5, 0.0, 0.5, 1.0, 0.0, 0.5, -0.5, 0.0}

Нужно проверять в map, существует ли в ключе значение из
массива v, если да, то присваивать его значению тотже инкремент.

 for(int i = 0; i < 9; i ++) 
 map.insert(std::pair<float,int>(v[i],i));
 0.5 : 0 
 0.5 : 0 
 0.0 : 1 
 0.5 : 0 
 1.0 : 2 
 0.0 : 1 
 0.5 : 0 
-0.5 : 3 
 0.0 : 1

Вопрос: можно ли делать проверку существования ключа в map на этапе вставки?

Answer 1

"Тот же инкремент" — это как расшифровывается? Подсчитать, сколько раз в массиве встречается каждое значение? Если массив небольшой, можно использовать map::operator[], он вставляет value-initialized элемент, если ключа еще нет в мапе:

std::map<float, ::std::size_t> histogram;
for(::std::size_t i{}; i < sizeof(v) / sizeof(v[0]); ++i) {
    ++histogram[v[i]];
}
Answer 2

Можно, стоит лишь проверить значение, возвращаемое insert:

auto const insertion_result{map.emplace(v[i], i)};
if(insertion_result.second)
{
     // элемент добавлен
}
else
{  
     // элемент уже был
}

А insertion_result.first будет итератором на элемент.

Answer 3
float v[] = {0.5, 0.5, 0.0, 0.5, 1.0, 0.0, 0.5, -0.5, 0.0};
std::map<float, size_t> m{{-0.5, 3}, {1.0, 2}, {0.0, 0}}, handler(m);
for (auto &p : handler) //эта таблица с ключами  из m
    p.second = 1;       // со значениями 1
for(int i = 0; i < 9; ++i) {
    float f(v[i]);
    if (handler[f] != 1) continue; // если ключа нет, то ничего не делаем
    m[f] = i;        
    std::cout  << v[i] << '\t' << m[f] <<'\n';
}

Вы наверное так хотели?

READ ALSO
Передача параметров сигнала в лямбду

Передача параметров сигнала в лямбду

Имеем в наличии такой коннект

231
Проблема с отрисовкой .png файла

Проблема с отрисовкой .png файла

Нужно отрисовать картинку, которая должна быть любой высоты и ширины, проблема в том, что если я отрисовываю ее по такому принципу -- Ширина...

199
Java использование Properties глобально

Java использование Properties глобально

Как правильно использовать javautil

236
Java выполнение повторяющихся заданий

Java выполнение повторяющихся заданий

Есть сервис, который надо запускать периодическиКак лучше реализовать периодическое выполнение задания на джаве? Какие "за" и "против" использования...

198