LINUX.ORG.RU

Сообщения justice_for_all

 

проблема с std::find по std::map с унарным предикатом

Привет! Досталось тут перенести древний проект с bcppb6 под linux. Сначала решил его собрать, посмотреть что да как. Наткнулся на кучу неработающий кусков, с какими могу разбираюсь. Но в одном месте есть код, который не хочет компиляться и я не пойму что надо сделать с ним:

// h-file
    typedef std::pair<int, AnsiString> IntStringPair;
    typedef std::pair<int, IntStringPair> EdProgPair;
    typedef std::map<int, IntStringPair> EdProgramMap;

    EdProgramMap edprogrammap_;

// cpp-file
        EdProgramMap::const_iterator citer

        class UnaryPredicate {
        public:
            UnaryPredicate(const EditAchievementRow& ear)
                : ear_(ear) {}
            bool operator()(const EdProgPair& epp)
            {
                return epp.second.first == ear_.id_edform_;
            }
        private:
            EditAchievementRow ear_;
        };

        citer = std::find(
                    edprogrammap_.begin(),
                    edprogrammap_.end(),
                    UnaryPredicate(ear_)
                );

        if (citer != edprogrammap_.end())
            cmbEdProgram->ItemIndex = (*citer).first;
    }

Тут вроде должен происходить поиск по map'е, я думаю из-за того, что у контейнера аргумент типов это

std::pair<int, std::pair<int, AnsiString> >
, то он не может нормально вывести тип итераторов. Вот выхлоп на строку с find: E2285 Could not find a match for '_STL::find<_InputIter,_Tp>(_STL::_Rb_tree_iterator<_STL::pair<const int, _STL::pair<int,AnsiString> >,_STL::_Nonconst_traits<_STL::pair<const int,_STL::pair<int,AnsiString> > > >,_STL::_Rb_tree_iterator<_STL::pair<const int, _STL::pair<int,AnsiString> >,_STL::_Nonconst_traits<_STL::pair<const int,_STL::pair<int,AnsiString> > > > ,UnaryPredicate)'

Подскажите что где подписать?

 

justice_for_all
()

RSS подписка на новые темы