массив
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 на этапе вставки?
"Тот же инкремент" — это как расшифровывается? Подсчитать, сколько раз в массиве встречается каждое значение? Если массив небольшой, можно использовать 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]];
}
Можно, стоит лишь проверить значение, возвращаемое insert:
auto const insertion_result{map.emplace(v[i], i)};
if(insertion_result.second)
{
// элемент добавлен
}
else
{
// элемент уже был
}
А insertion_result.first будет итератором на элемент.
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';
}
Вы наверное так хотели?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости