Указатель на вставленый элемент в map
От: Аноним  
Дата: 06.09.07 10:31
Оценка:
Как получить корректно указатель на вставленный элемент, который хранится в map, если элемент map не указатель?
T* myproc()
{
  T t(0,"hello");
  mm.insert(std::make_pair(id, T));
  return /*как?*/
}
Re: &*iterator ? (-)
От: Erop Россия  
Дата: 06.09.07 10:34
Оценка:
Здравствуйте, Аноним
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Указатель на вставленый элемент в map
От: Tiendil Беларусь  
Дата: 06.09.07 10:46
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Как получить корректно указатель на вставленный элемент, который хранится в map, если элемент map не указатель?

А>
А>T* myproc()
А>{
А>  T t(0,"hello");
А>  mm.insert(std::make_pair(id, T));
А>  return /*как?*/
А>}
А>



Имхо корректно никак, правда ничто не мешает написать &mm[key] ([] возвращает ссылку на объект), но, как я понимаю, этот указатель может стать невалидным в любой момент (не гарантруется что аллокатор не захочет куда-нибудь переместить данный объект). Так что лучше в мапе хранить указатели на объекты.
Re: Указатель на вставленый элемент в map
От: jazzer Россия Skype: enerjazzer
Дата: 06.09.07 10:47
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

А>Как получить корректно указатель на вставленный элемент, который хранится в map, если элемент map не указатель?

А>
А>T* myproc()
А>{
А>  T t(0,"hello");
А>  mm.insert(std::make_pair(id, T));
А>  return /*как?*/
А>}
А>

insert возвращает итератор, указывающий на вставленный элемент
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Указатель на вставленый элемент в map
От: Анатолий Широков СССР  
Дата: 06.09.07 10:48
Оценка:
Анализируй информацию возвращаемую insert:


std::pair<mymap::iterator, bool> info = mm.insert(std::make_pair(id, T));
if( info.second ) 
   std::cout << "элемента не существовало";
else
   std::cout << "элемент уже существует с таким ключем";
return info.first;
Re: Указатель на вставленый элемент в map
От: Максим2006 Беларусь  
Дата: 06.09.07 10:56
Оценка: 1 (1) :)
Здравствуйте, Аноним, Вы писали:

А>Как получить корректно указатель на вставленный элемент, который хранится в map, если элемент map не указатель?

А>
А>T* myproc()
А>{
А>  T t(0,"hello"); // зачем?
А>  mm.insert(std::make_pair(id, T));
А>  return /*как?*/
А>}
А>


T* myproc()
{
//  T t(0,"hello");
  std::pair<map_type::iterator, bool> pos = mm.insert(std::make_pair(id, T));
  return &(pos.first->second);
}
Re[2]: Указатель на вставленый элемент в map
От: Left2 Украина  
Дата: 06.09.07 11:00
Оценка:
T>Имхо корректно никак, правда ничто не мешает написать &mm[key] ([] возвращает ссылку на объект), но, как я понимаю, этот указатель может стать невалидным в любой момент (не гарантруется что аллокатор не захочет куда-нибудь переместить данный объект). Так что лучше в мапе хранить указатели на объекты.

map не перемещает обьекты. гарантированно. Ты путаешь с vector.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[2]: Указатель на вставленый элемент в map
От: Анатолий Широков СССР  
Дата: 06.09.07 11:02
Оценка: +1
J>insert возвращает итератор, указывающий на вставленный элемент

Он возвращает пару (iterator, bool), а не итератор.
Re[3]: Указатель на вставленый элемент в map
От: jazzer Россия Skype: enerjazzer
Дата: 06.09.07 11:14
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

J>>insert возвращает итератор, указывающий на вставленный элемент


АШ>Он возвращает пару (iterator, bool), а не итератор.


не занимайся буквоедством
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Указатель на вставленый элемент в map
От: Кодт Россия  
Дата: 06.09.07 13:07
Оценка: :)
Здравствуйте, Анатолий Широков, Вы писали:

J>>insert возвращает итератор, указывающий на вставленный элемент


АШ>Он возвращает пару (iterator, bool), а не итератор.


И итератор не на элемент, а на пару (константный ключ, значение).

И не автомобиль, а червонец. И не в лотерею, а в карты. И не выиграл, а проиграл.

T* myproc()
{
    return &(mm.insert(make_pair(key,value)).first->second);
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Указатель на вставленый элемент в map
От: Анатолий Широков СССР  
Дата: 06.09.07 15:34
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Анатолий Широков, Вы писали:


J>>>insert возвращает итератор, указывающий на вставленный элемент


АШ>>Он возвращает пару (iterator, bool), а не итератор.


J>не занимайся буквоедством


не вводи людей в заблуждение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.