powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по std::map
9 сообщений из 9, страница 1 из 1
Вопрос по std::map
    #33546725
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такие объявления:

Код: plaintext
1.
2.
map <string, string> ms;
map <string, string>::iterator it_ms;
ofstream of;

заполняем карту... ну хотя бы так:
Код: plaintext
1.
2.
ms["k1"] = "aa";
ms["k2"] = "bb";
ms["k3"] = "cc";

почему выражение
Код: plaintext
of << (*it_ms).first.c_str();
выполняется нормально, а
Код: plaintext
of << (*it_ms).second.c_str();
вылетает с access violation?
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33546829
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
it_ms вы как инициализируете?
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33546956
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как ms.begin().

Полный код примерно такой (надергал не компилируя):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
map <string, string> ms;
map <string, string>::iterator it_ms;
ofstream of;

ms["k1"] = "aa";
ms["k2"] = "dd";
ms["k3"] = "cc";

of.open("_out_map");
for (it_ms = ms.begin();  it_ms != ms.end();  it_ms++){
	of << (*it_ms).first.c_str() << endl;
}
of.close();

вот это работает. Но никакие попытки вывести second у меня успеха не имели :-(
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33547015
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gradientкак ms.begin().

Полный код примерно такой (надергал не компилируя):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
map <string, string> ms;
map <string, string>::iterator it_ms;
ofstream of;

ms["k1"] = "aa";
ms["k2"] = "dd";
ms["k3"] = "cc";

of.open("_out_map");
for (it_ms = ms.begin();  it_ms != ms.end();  it_ms++){
	of << (*it_ms).first.c_str() << endl;
}
of.close();

вот это работает. Но никакие попытки вывести second у меня успеха не имели :-(

сэконд Вы случаем не в цикле пытаетесь выводить ?
тогда он попытаеться взять элемент за концом последнего.

(круглый)
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33547100
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <map>
#include <iostream>
#include <fstream>

using namespace std;

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
map <string, string> ms;
map <string, string>::iterator it_ms;
ofstream of;

ms["k1"] = "aa";
ms["k2"] = "dd";
ms["k3"] = "cc";

of.open("_out_map");
for (it_ms = ms.begin();  it_ms != ms.end();  it_ms++){
	of << (*it_ms).second.c_str() << endl;
}
of.close();
}

_out_map
aa
dd
cc


Это на BCB6
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33547108
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0сэконд Вы случаем не в цикле пытаетесь выводить ?
В цикле. Примерно так:
Код: plaintext
1.
of << (*it_ms).first.c_str() << ", ";
of << (*it_ms).second.c_str() << endl;
kolobok0тогда он попытаеться взять элемент за концом последнего.
Это почему? Конструкция (*it_ms) вроде как возвращает пару, у которой есть как первый элемент, так и второй. Или я чего-то не понимаю?

А как тогда вывести <key, value> построчно в файл?
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33547122
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё работает. Что-то у тебя еще там есть ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <map>
#include <string>
#include <iostream>

int main(){
  std::map <std::string, std::string> ms;
  std::map <std::string, std::string>::iterator it_ms, ie;

  ms["k1"] = "aa";
  ms["k2"] = "dd";
  ms["k3"] = "cc";

  for (it_ms = ms.begin(), ie = ms.end(); it_ms != ie; ++it_ms){
    std::cout << (*it_ms).first.c_str() << " = ";
    std::cout << (*it_ms).second.c_str() << std::endl;
  }
  return  0 ;
}
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33547175
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Действительно работает. Из моих действий - пожалуй, только solution перегрузил. Всем огромное спасибо за участие.
...
Рейтинг: 0 / 0
Вопрос по std::map
    #33734199
cruse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как организовать с помощью std::map чтоб дание імені ключа і значения сохранялиль в разних файлах на диске!!
Вот пример:
#include <iostream>
#include <map>
#include <cstring>
#include <conio.h>
using namespace std;
// клас для зберігання імен-ключів
class name {
char str[20];
public:
name() {strcpy(str, "");}
name(char *s) {strcpy(str, s);}
char *get() {return str;}
};
// для объектів класу name треба
// визначити оператор < (менше)
bool operator<(name a, name b) {
return strcmp(a.get(), b.get()) < 0;
}
// клас для зберігання номерів-значень
class phonenum {
char str[20];
public:
phonenum() {strcmp(str, "");}
phonenum(char *s) {strcpy(str, s);}
char *get() {return str;}
};
typedef map<name, phonenum, less<name> > psevdo;
// друк однієї пари ключ/значення
template <class First, class Second> ostream&
operator<<(ostream& out, const pair<First,Second>
&pp){
cout <<"Reis: "<< pp.first.get() << " Vartist: "
<< pp.second.get();
return out;
}
int main() {
map<name, phonenum, less<name> > m;
// ініціалізація асоціативного списку
// іменами і номерами
m.insert(pair <name, phonenum>
(name("Lv-Kiev"),phonenum("10$")));
m.insert(pair <name, phonenum>
(name("Lv-London"), phonenum("100$")));
m.insert(pair <name, phonenum>
(name("Lv-Odessa"), phonenum("50$")));
m.insert(pair<name, phonenum>
(name("Lv-Greece"), phonenum("200")));
//ввід імені ключа
char str[80];
cout << "Input name: ";
cin >> str;
map <name, phonenum, less<name> >::iterator p;
// пошук номера за іменем-ключем
p = m.find (name(str));
m.
if (p != m.end())
cout << "Znachennia: " << *p;
else
cout << "Imeni v asociatuvnomy spisky nemae\n";
getch();
return 0;
}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по std::map
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]