Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> std::transform vector to map, не компилит 
:(
    Опции темы
Vaulter
Дата 22.8.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



Код

typedef std::vector<unsigned int> vint;
typedef std::map<unsigned int, unsigned int> mint;

    vint group;
    mint mapi;

    std::transform( group.begin(), group.end(), std::inserter( mapi, mapi.begin() ),
        std::bind2nd( std::ptr_fun( &std::make_pair< mint::key_type, mint::value_type > ), (mint::value_type)0 )
    );



Цитата

interface.cpp: In member function 'void voice_module::check_gr(r::Request&)':
interface.cpp:156: error: no matching function for call to 'std::pair<const unsigned int, unsigned int>::pair(int)'
/usr/include/c++/4.2/bits/stl_pair.h:84: note: candidates are: std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = const unsigned int, _T2 = unsigned int]
/usr/include/c++/4.2/bits/stl_pair.h:80: note:                 std::pair<_T1, _T2>::pair() [with _T1 = const unsigned int, _T2 = unsigned int]
/usr/include/c++/4.2/bits/stl_pair.h:69: note:                 std::pair<const unsigned int, unsigned int>::pair(const std::pair<const unsigned int, unsigned int>&)
*** Error code 1



направьте на путь истинный! 


--------------------
PM MAIL WWW ICQ   Вверх
borisbn
Дата 23.8.2012, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



1. Замени mint::value_type на mint::mapped_type.  value_type - это пара, а тебе (насколько я понял) нужно именно значение (второй тип)
2. У меня выдавало гору непонятных ошибок, пока я не поставил
#undef __GXX_EXPERIMENTAL_CXX0X__ 
перед всеми инклюдами

Добавлено @ 10:52
http://liveworkspace.org/code/ad2ee2574d43...23b051a06a43cb8

P.S. Я тоже часто пытаюсь сделать всё через стандартные алгоритмы, а потом переписываю на простой for, сравниваю и вижу, что с for'ом гораздо понятней и читаемее. сравни свою конструкцию
Код
std::transform( group.begin(), group.end(), std::inserter( mapi, mapi.begin() ),
        std::bind2nd( std::ptr_fun( &std::make_pair< mint::key_type, mint::value_type > ), (mint::value_type)0 )
    );

и эту
Код
    for ( const auto & it : group ) {
       mapi.insert( std::make_pair( it, 0 ) );
    }

 smile 

без С++11 будет чуть-чуть более громоздко
Код
for ( vint::const_iterator it = group.begin(), e = group.end(); it != e; ++it  ) {
       mapi.insert( std::make_pair( *it, 0 ) );
    }


Это сообщение отредактировал(а) borisbn - 23.8.2012, 10:53


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Vaulter
Дата 27.8.2012, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



по понятность написания - полностью согласен,
но, чисто гипотетически, transform может быть оптимизирован и быть быстрее цикла


--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1054 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.