Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2014, 08:13   #1
Небожитель
Пользователь
 
Регистрация: 31.03.2011
Сообщений: 10
По умолчанию Работа с контейнерами.

map< char*, int > Test;

Test.insert( "Hellow", 2 ); // Почему не могу положить данные ?

Еррорка:

Цитата:
1>Cont.cpp(12): error C2664: std::_Tree_iterator<_Mytree> std::_Tree<_Traits>::insert(std::_T ree_const_iterator<_Mytree>,std:a ir<_Ty1,_Ty2> &&): невозможно преобразовать параметр 1 из "const char [6]" в "std::_Tree_const_iterator<_Mytree> "
1> with
1> [
1> _Mytree=std::_Tree_val<std::_Tree_s imple_types<std:air<char *const ,int>>>,
1> _Traits=std::_Tmap_traits<char *,int,std::less<char *>,std::allocator<std:air<char *const ,int>>,false>,
1> _Ty1=char *const ,
1> _Ty2=int
1> ]
1> and
1> [
1> _Mytree=std::_Tree_val<std::_Tree_s imple_types<std:air<char *const ,int>>>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
Так конечно могу положить: Test["N"] = 2;

Ну почему через insert не выходит?


Как использовать swap? Есть две записи:

Test["A"] = 1; // Например пятая позиция.

и

Test["B"] = 2; Например десятая позиция.

swap нужен для того, чтоб поменять позицию ? А как ? Что-то не нашел примера в инете, только описание, а сам не допер. Когда это например может быть полезным ?

Так же не понял, каким образом участвует бывает pair.


В этом примере например мы кладем данные через pair, а без него, что ни как ?

Код:
#include <map>
#include <string>

using namespace std;

typedef std::map<std::string, std::string> TStrStrMap;
typedef std::pair<std::string, std::string> TStrStrPair;

int main(int argc, char *argv[])
{
	TStrStrMap tMap;

	tMap.insert(TStrStrPair("yes", "no"));
	tMap.insert(TStrStrPair("up", "down"));
	tMap.insert(TStrStrPair("left", "right"));
	tMap.insert(TStrStrPair("good", "bad"));

	TStrStrMap::iterator p;

	for( p = tMap.begin(); p!=tMap.end(); ++p)
	{
		printf( "DEBUG: %s\n", (char*)&p->first );
	}

	return getchar();
}
И почему без typedef не хочет работать? На сколько я знаю, он просто создает свой тип данных, а тут то как, почему..

Как-то уже всё заморочено с ними, с контейнером Vector куда проще.

Может кто-то объяснить с примерами или дать, где уже есть подробная информация.

Последний раз редактировалось Stilet; 30.05.2014 в 10:09.
Небожитель вне форума Ответить с цитированием
Старый 30.05.2014, 10:36   #2
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

Код:
map<char*, int> Test;
я не понял смысла зачем ключи - это указатели, и предполагаю что хотелось иметь строки как ключи. Поэтому заменить на:
Код:
map<string, int> Test;
вставлять так, потому что в мапе должны лежать std:air<string, int>
Код:
Test.insert(std::make_pair("Hello", 1));
casekey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с псевдослучайными последовательностями (ПСП). Работа с цветом.(Pascal) Shick Помощь студентам 7 11.12.2013 19:25
Работа с контейнерами winst2014 Помощь студентам 0 18.02.2013 16:21
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00