Author

Topic: [РЕШЕНО]boost::bimap insert цикле (Read 2359 times)

sr. member
Activity: 460
Merit: 250
November 11, 2014, 11:47:56 AM
#12
заработало! спасибо ребятам с киберфорума!
вот лог:
вот собственно лог:
первая итерация внешнего цикла
2014-11-11 17:14:10 keypool reserve 3
2014-11-11 17:14:10 !!!!!!!! 0
2014-11-11 17:14:10 keypool reserve 4
2014-11-11 17:14:10 !!!!!!!! 1
а на второй появились данные
2014-11-11 17:14:11 !!!!!!!! 2
2014-11-11 17:14:11 @@@@@@@@1
2014-11-11 17:14:11 !!!!@@!!!!!
2014-11-11 17:14:11 !!!!!!!!! 818ed31e955eedc696d726d67c99d2acba7a2070c8993f9dcb9cf5e80e3258c8!!!!!!!!!! 792889
2014-11-11 17:14:11 !!!!!!!! 3
2014-11-11 17:14:11 @@@@@@@@1
2014-11-11 17:14:11 !!!!@@!!!!!
2014-11-11 17:14:11 !!!!!!!!! 9e863ba6b1fb4c5f8b816b9d3d44438e0ed48438f297cb2308897b7dc5b6f8ae!!!!!!!!!! 792889

а вот код:
Code:
bool found = false;
printf("!!!!!!!! %i \n",mmaapp.size());
it = mmaapp.find(tx_id.c_str());
while(it != mmaapp.end()) {
printf("@@@@@@@@1 \n");
if (strcmp(it->first.c_str(), tx_id.c_str())){
printf("!!!!@!!!!! \n");
break;
}else{
found = true;
printf("!!!!@@!!!!! \n");
break;
}
++it;
printf("@@@@@@@@ \n");
}
if(found) {
printf("!!!!!!!!! %s!!!!!!!!!! %i \n",it->first.c_str() , it->second);
}
sr. member
Activity: 460
Merit: 250
November 11, 2014, 07:27:50 AM
#11
пробую вот такую конструкцию:
Code:
while(.....){
                               bool found = false;
//std::string key = tx_id;
it = mmaapp.find(tx_id);
while(it != mmaapp.end()) {
if (strcmp(it->first, tx_id)){
printf("not found \n");
break;
}else{
found = true;
printf("ok tx_td \n");
break;
}
++it;
}
if(found) {
printf("!!!!!!!!! %s!!!!!!!!!! %i \n",it->first.c_str() , it->second);
}
тут инсерт
}
sr. member
Activity: 460
Merit: 250
November 11, 2014, 06:08:55 AM
#10
а отладчик что говорит, чтобы не гадать ломается что-то в цикле или нет?
нет отладчика  Grin
пересобираю по вот этой инструкции https://bitcointalksearch.org/topic/building-headless-bitcoin-and-bitcoin-qt-on-windows-149479 сразу форк

если писать в четкости как вы описали в тесте то компилятор выдает ошибку

src\main.cpp:4530:31: error: invalid user-defined conversion from 'long long uns
igned int' to 'const key_type& {aka const std::basic_string&}' [-fpermissi
ve]
     it = mymultimap.find(tx_id);
                               ^
legendary
Activity: 1400
Merit: 1000
November 11, 2014, 04:47:03 AM
#9
В плюсах использование printf не есть ТруЪ. Существуют такие механизмы, как cout.
cout не помогает
результат тот же
при попытке использовать it->first программа выпадает в осадок
добавление или убирание c_str() не влияет на результат....

причем  если insert делать до find то все красиво выводится
но мне нужно именно после

такое очучение что во время перехода на новую итерацию цикла
в мапе что то ломается и программа не может отобразить что внутри
а отладчик что говорит, чтобы не гадать ломается что-то в цикле или нет?
sr. member
Activity: 460
Merit: 250
November 11, 2014, 04:46:11 AM
#8
В плюсах использование printf не есть ТруЪ. Существуют такие механизмы, как cout.
cout не помогает
результат тот же
при попытке использовать it->first программа выпадает в осадок
добавление или убирание c_str() не влияет на результат....

причем  если insert делать до find то все красиво выводится
но мне нужно именно после

такое очучение что во время перехода на новую итерацию цикла
в мапе что то ломается и программа не может отобразить что внутри
legendary
Activity: 1400
Merit: 1000
November 11, 2014, 04:22:43 AM
#7
вот такой код не работает:
Code:
std::multimap mymultimap;
std::multimap::iterator it;
while{
......
       if(mymultimap.size()>0){
       it = mymultimap.find(tx_id.c_str());
       printf("!!!!!!!!! %s!!!!!!!!!! %i \n",it->first.c_str() , it->second);
       }

......
mymultimap.insert ( std::pair(tx_id.c_str(),nBestHeight) );
cntinue();
......
}
но мне нужно инсертить именно после проверки наличия пары в мапе

поможите плз Huh

Да вроде должен работать....
Вот тестик сделал, заработал...
legendary
Activity: 1498
Merit: 1021
Was mich nicht umbringt macht mich stärker [F.N.]
November 11, 2014, 04:08:47 AM
#6
В плюсах использование printf не есть ТруЪ. Существуют такие механизмы, как cout.
sr. member
Activity: 460
Merit: 250
November 11, 2014, 02:53:33 AM
#5
вот такой код не работает:
Code:
std::multimap mymultimap;
std::multimap::iterator it;
while{
......
       if(mymultimap.size()>0){
       it = mymultimap.find(tx_id.c_str());
       printf("!!!!!!!!! %s!!!!!!!!!! %i \n",it->first.c_str() , it->second);
       }

......
mymultimap.insert ( std::pair(tx_id.c_str(),nBestHeight) );
cntinue();
......
}

однако если ставлю
Code:
std::multimap mymultimap;
std::multimap::iterator it;
while{
......
       mymultimap.insert ( std::pair(tx_id.c_str(),nBestHeight) );
       if(mymultimap.size()>0){
       it = mymultimap.find(tx_id.c_str());
       printf("!!!!!!!!! %s!!!!!!!!!! %i \n",it->first.c_str() , it->second);
       }

......

cntinue();
......
}

то все ок

но мне нужно инсертить именно после проверки наличия пары в мапе

поможите плз Huh
sr. member
Activity: 460
Merit: 250
November 10, 2014, 07:34:57 AM
#4
столкнулся с еще одной проблемой

обьявляю мапу

после чего идет цикл while внутри него идет :
если мапа не пустая то принтФ содержимое мапы
далее идет добавление элемента в мапу

но это не работает...

если добавлять в мапу до принтФ то отоборажается иначе пусто

как будто в цикле данные в мапу не добавляются....
а мне очень надо именно в цикле Undecided
sr. member
Activity: 460
Merit: 250
November 07, 2014, 06:48:25 AM
#3
Зачем bimap? Туда - std::map, обратно - std::multimap.
спасибо  действительно std::multimap
это может
newbie
Activity: 41
Merit: 0
November 06, 2014, 11:16:16 AM
#2
typedef boost::bimap tx_map;
tx_map tm;

while{....

tm.insert( tx_map::value_type(tx_id, nHeight) );

....}

задача добавлять
новые записи в мапу
причем
tx_id должен быть уникальным а вот nHeight может быть каким угодно
Зачем bimap? Туда - std::map, обратно - std::multimap.
sr. member
Activity: 460
Merit: 250
November 06, 2014, 03:22:34 AM
#1
Подскажите
имею конструкцию
typedef boost::bimap tx_map;
tx_map tm;

while{....

tm.insert( tx_map::value_type(tx_id, nHeight) );

....}

задача добавлять
новые записи в мапу
причем
tx_id должен быть уникальным а вот nHeight может быть каким угодно

в той конструкции что у меня, при добавлении записей в цикле уникальным автоматически стает nHeight
предположу что это из-за того что он int
а хотелось бы наоборот

читал в манах про iterator  который можно в качестве индекса использовать чтоб nHeight индексом не становился

update:
блин посмотрел ман повнимательнее
Code:
bm.clear();

bm.insert( bm_type::value_type( 1, "one" ) );

bm.insert( bm_type::value_type( 1, "1"   ) ); // [b]No effect![/b]
bm.insert( bm_type::value_type( 2, "one" ) ); //[b] No effect![/b]

assert( bm.size() == 1 );

как же быть?  Sad делать выкрутасы с вложенными векторами ох как неохота...
Jump to: