Bitcoin Forum
May 30, 2024, 12:50:38 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: C++ затык с vector  (Read 1729 times)
info_infoman (OP)
Sr. Member
****
Offline Offline

Activity: 460
Merit: 250



View Profile
October 20, 2014, 08:55:23 AM
Last edit: October 20, 2014, 09:06:53 AM by info_infoman
 #1

сишные гуру помогите Embarrassed
Code:
typedef pair<std::string, unsigned int> T;
class myfunctor
{
public:
myfunctor(std::string keyval):m_key(keyval){}
bool operator() (const T& p)
{
return (p.first == m_key);
}
private:
string m_key;
};
int main()
{
std::string test;
std::string tx_id=tx.GetHash().ToString().c_str();///id транзакции в string
int start=nBestHeight;//номер блока в int
vector<T> v;
v.clear();

v.push_back(make_pair(tx_id.c_str(), start));// запихиваем в вектор
vector<T>::const_iterator it = find_if(v.begin(), v.end(), myfunctor(tx_id));//ищем по номеру транзакции
test +=boost::lexical_cast<std::string>(it->second);//передаем в test номер блока
}
но блин вектор на поверку оказывается пустым
и соответственно переменная test на выходе = 0
а дожна быть в виде номера блока

info_infoman (OP)
Sr. Member
****
Offline Offline

Activity: 460
Merit: 250



View Profile
October 20, 2014, 10:47:59 AM
 #2

самое интересное если добавляю
v.push_back(make_pair("test", 1));
и делаю поиск
vector<T>::const_iterator it = find_if(v.begin(), v.end(), myfunctor("test"));

то все работает!!!!
вектор сразу становится непустым
и на выходе test = 1 в стринге!!

чего то напутал с типом данных походу....
вроде все правильно преобразовываю...

neiros
Legendary
*
Offline Offline

Activity: 3514
Merit: 1100



View Profile WWW
October 20, 2014, 02:26:11 PM
 #3

...
v.push_back(make_pair(tx_id.c_str(), start));// запихиваем в вектор
...
v.push_back(make_pair(tx_id, start));
Я бы вот так в самом начале бы попробовал. А уже потом начал бы извращаться по всякому если бы чего-либо не заработало. Smiley

info_infoman (OP)
Sr. Member
****
Offline Offline

Activity: 460
Merit: 250



View Profile
October 20, 2014, 04:46:40 PM
 #4

...
v.push_back(make_pair(tx_id.c_str(), start));// запихиваем в вектор
...
v.push_back(make_pair(tx_id, start));
Я бы вот так в самом начале бы попробовал. А уже потом начал бы извращаться по всякому если бы чего-либо не заработало. Smiley

именно так я и поступал...
потом уже начал извраты добавлять...
к сожалению так тоже не работает
я проверял переменную tx_id там действительно хеш транзакции в string
и start это именно int номера блока....
сейчас добился появления номера в test но он совсем не номер  а какой то набор цифр откуда взявшихся не понятно...

neiros
Legendary
*
Offline Offline

Activity: 3514
Merit: 1100



View Profile WWW
October 20, 2014, 05:04:56 PM
 #5

По-моему vector тут не подходит. То-ли map, то-ли set или что то в этом роде лучше наверное будет, если меня память не подводит.
Я пока что очень далёк от полного понимания всего что уже наворочено в с++, а от своего компа рабочего ещё дальше. Там как раз нечто подобное сейчас ковыряю...

info_infoman (OP)
Sr. Member
****
Offline Offline

Activity: 460
Merit: 250



View Profile
October 20, 2014, 06:16:29 PM
 #6

По-моему vector тут не подходит. То-ли map, то-ли set или что то в этом роде лучше наверное будет, если меня память не подводит.
Я пока что очень далёк от полного понимания всего что уже наворочено в с++, а от своего компа рабочего ещё дальше. Там как раз нечто подобное сейчас ковыряю...
map тормозной
тож думал об этом

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

Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!