Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
#1

Помещение данных в multimap - C++

21.10.2014, 21:52. Просмотров 1703. Ответов 16
Метки нет (Все метки)

добрый день, можете подсказать как можно сделать, те данные что я помещаю в моем коде в map, поместить в multimap
вот код
C++
1
2
std::map<std::string, std::vector<std::string>> Database;
Database[GetData.ReturnAddr].push_back(&GetData.NameFile[0]);
просто как я понял [] для мультимап недоступен, а через insert что-то кручу верчу некак немогу всунуть, постояно разные ошибки какие нибуть
и если можно подскажите пожалуйста еще с выводом
делаю так
C++
1
2
3
4
5
std::map<std::string, std::vector<std::string>>:: iterator Iter;
for(Iter=Database.begin();Iter!=Database.end();Iter++)
{
    std::cout<<Iter->first<<":"<<Iter->second<<std::endl;
}
но ругается на Iter->second из-за вектора насколько я понимаю, тоже уже вроде как по разному попробывал, но все невыходит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2014, 21:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Помещение данных в multimap (C++):

Multimap. Ошибка operator+ not implemented in type multimap
Я начинающий в си, есть задача подсчета частоты встречаемости символов, делал...

Как посчитать среднее значение и количество одинаковых данных в Multimap?
Вопрос в следующем. Как расчитать среднее значение цифр в multimap и общее...

multimap
Я что-то не понимаю в чем проблема! #include &lt;iostream&gt; #include &lt;string&gt;...

STL multimap.
#include &quot;stdafx.h&quot; #include &lt;map&gt; #include &lt;algorithm&gt; #include &lt;string&gt;...

multimap::emplace()
При компиляции этого кода: #include &lt;iostream&gt; #include &lt;map&gt; using...

сортировка в multimap
доброго времени суток. собственно, вопрос такой: есть программа использующая...

16
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4385 / 2360 / 655
Регистрация: 18.10.2014
Сообщений: 4,002
22.10.2014, 09:59 #2
Что значит "поместить в mutimap"? Зачем? Просто как самоцель: поместить в mutimap просто чтобы поместить в mutimap? Или вы хотите избавиться от вектора в данных?
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
22.10.2014, 10:13  [ТС] #3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Зачем?
ну если у одного ключа будет два разных значения он же будет хранить только одно (map'a)
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Или вы хотите избавиться от вектора в данных?
как раз наоборот интересует
C++
1
<std::string, std::vector<std::string>>
то что
C++
1
<std::string,std::string>
у меня нормально вышло сохранить, а с вектором не получается
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.10.2014, 10:24 #4
Пример вставки и вывода значений, используя std::multimap:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <map>
#include <string>
#include <utility>
     
int main() {
     
    std::multimap<int, std::string> mm;
     
    mm.insert( std::make_pair(42, "message") );
    mm.insert( std::make_pair(100500, "hello") );
    mm.insert( std::make_pair(42, "string") );
     
    for( const auto& e : mm )
    {
    std::cout << "key:" << e.first << " value:" << e.second << std::endl;
    }
     
    return 0;
}
http://ideone.com/FQDhdh
1
-THE_MASTER666-
Заблокирован
22.10.2014, 10:41 #5
Цитата Сообщение от итернал Посмотреть сообщение
std::map<std::string, std::vector<std::string>> Database;
Database[GetData.ReturnAddr].push_back(&GetData.NameFile[0]);
Цитата Сообщение от итернал Посмотреть сообщение
добрый день, можете подсказать как можно сделать, те данные что я помещаю в моем коде в map, поместить в multimap
вот код
В мультимап вставка идёт следующим образом:
C++
1
2
3
std::multimap<std::string, std::string> multiMap;
multiMap.insert(std::make_pair("stringKey", "stringFirstValueForFirstKey"));
multiMap.insert(std::make_pair("stringKey", "stringSecondValueForFirstKey"));
В твоём случае наверное будет так:
C++
1
2
std::multimap<std::string, std::string> Database;   
Database.insert(std::make_pair(GetData.ReturnAddr, &GetData.NameFile[0]));
Хотя из твоего куска кода совершенно не понятно, что такое GetData.ReturnAddr и &GetData.NameFile[0]. Можно предположить, что GetData.ReturnAddr это std::string, тогда ошибки не будет и пока что всё ок, но взятие адреса у нулевого элемента какого - то массива &GetData.NameFile[0] - это явно в результате не строка, а long (DWORD в WinApi), так что там ошибка в любом случае, может ты имел ввиду, что в этом массиве нулевой элемент содержит какую - то строку с именем файла? Если так - тогда убирай амперсант, чтоб было просто GetData.NameFile[0]

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
for( const auto& e : mm )
* * {
* * std::cout << "key:" << e.first << " value:" << e.second << std::endl;
* * }
С выходом новых стандартов развелось столько выпендрёжа в циклах, что мама не горюй ухахах, голь на выдумку хитра, теперь можно циклы записывать тысячей и одним способов

Добавлено через 4 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
for( const auto& e : mm )
Это кстати чё? Типа foreach получается?
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.10.2014, 10:44 #6
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
С выходом новых стандартов развелось столько выпендрёжа в циклах,
Стало удобнее и проще писать популярные конструкции. Скоро (в C++17 наверное) Страуструп пропихнет в Стандарт ещё concepts, тогда и стандартные алгоритмы будет проще вызывать. Например:
C++
1
 std::sort( container );
вместо
C++
1
std::sort( container.begin(), container.end() );
Добавлено через 39 секунд
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Типа foreach получается?
Да. Перебор от std::begin(container) до std::end(container).
2
-THE_MASTER666-
22.10.2014, 10:57
  #7

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
std::sort( container );
ну правильно, чё гемороиться то с лишними буквами в коде :D

0
gromo
22.10.2014, 11:22
  #8

Не по теме:

Скоро (в C++17 наверное) Страуструп пропихнет в Стандарт ещё concepts
Оно то удобнее, но порог вхождения в язык все выше и выше, бедные начинающие :D

0
ForEveR
22.10.2014, 12:15
  #9

Не по теме:

gromo, Начинающим это знать необязательно. Вызов sort(container) требует меньше знаний чем sort(container.begin(), container.end()). А вот если ты хочешь понять как устроено все под капотом - тогда да.

0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
22.10.2014, 14:31  [ТС] #10
вообщем std::vector<std::string> я туда не сохраню? спасибо за пояснения
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
GetData.ReturnAddr и &GetData.NameFile[0]
это у меня массивы char [256]
ну при
std::string,std::string
записываются нормально

Добавлено через 33 минуты
я же правильно понимаю что когда я делаю
C++
1
Database.erase(GetData.ReturnAddr);
то у меня по ключу удалится и второе значение? а если у меня их несколько то сначало нужно сделать
Database.count()
а потом цыкл до того сколько у меня там этих ключей с удалением
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.10.2014, 14:41 #11
Цитата Сообщение от итернал Посмотреть сообщение
я же правильно понимаю
Будут удалены все значения, ассоциированные с ключом.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
22.10.2014, 14:48  [ТС] #12
тоесть если у меня есть в мапе
1 а
1 б
2 с
и я сделаю
map.erase(1);
то останется в мапе
2 с
так?
без привязки к типу и всякое такое, написал просто для понимания)
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.10.2014, 14:52 #13
Цитата Сообщение от итернал Посмотреть сообщение
то останется в мапе
Да. http://ideone.com/pSMdKc
Такие проблемы, мне кажется, проще самому проверить, чем вопрос на форум выносить.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8024 / 4867 / 1425
Регистрация: 29.11.2010
Сообщений: 13,253
22.10.2014, 14:52 #14
Можно для вставки использовать метод emplace (С++11)

Цитата Сообщение от gromo Посмотреть сообщение
Оно то удобнее, но порог вхождения в язык все выше и выше, бедные начинающие
auto, auto, auto, auto. Что тяжелее то? С новыми стандартами язык расширяется, добавляются плюшки и синтаксический сахар. Никто не заставляет их использовать, но с ними и писать проще. ИМХО, проще выучить std::string, vector, smart pointer, чем иметь возню с памятью.
1
Tulosba
22.10.2014, 14:54
  #15

Не по теме:

Цитата Сообщение от gromo Посмотреть сообщение
но порог вхождения в язык все выше и выше,
порог вхождения в "илиту" увеличивается, а не в язык ;)

0
gromo
372 / 271 / 30
Регистрация: 04.09.2009
Сообщений: 1,214
22.10.2014, 19:49 #16
Цитата Сообщение от MrGluck Посмотреть сообщение
добавляются плюшки и синтаксический сахар
да, однако чтобы наслаждаться этим сахаром, надо сполна наесться соли, как ни крути
0
MrGluck
Модератор
Эксперт CЭксперт С++
8024 / 4867 / 1425
Регистрация: 29.11.2010
Сообщений: 13,253
22.10.2014, 19:55 #17
Цитата Сообщение от gromo Посмотреть сообщение
да, однако чтобы наслаждаться этим сахаром, надо сполна наесться соли, как ни крути
brace initialization, ключевые слова constexpr, final, delete, override, auto. Что в этом сложного? Самое сложное в новом стандарте - мув семантика, и та осваивается за день.
1
22.10.2014, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 19:55
Привет! Вот еще темы с решениями:

Ошибка с multimap
Здравствуйте, помогите пожалуйста разобраться есть multimap переменная...

Multimap зацикливается
Всем добрый вечер, Помогите, пожалуйста разобраться с зацикленным &quot;Not...

Отсортировать multimap по pair->second
отсортировать multimap по полю second-&gt;year , впринципе без разницы по убыванию...

Работа с контейнером multimap
Помогите пожалуйста. Вот вся задача: Определить класс autoOwnerDirectory...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru