在boost元组的向量中找到元素的位置

时间:2016-09-27 11:20:56

标签: c++ boost boost-tuples

我正在迭代boost :: tuples的向量以便找到一个元素。但是,我还想在向量中找到此元素的确切位置,以便稍后删除它。 这是代码,但是std :: distance没有给我正确的值。

int Controller::isValid(int Id, int& pos) {

        pos = 0;

        for( std::vector< boost::tuple<int,std::string, std::string, std::string> >::const_iterator it = games.begin(); it != games.end(); it++) {

                if( boost::get<0>(*it) == Id) {
                        pos = std::distance< std::vector< boost::tuple<int,std::string, std::string, std::string> >::const_iterator >( games.begin(), it ) ;
                        return 0;
                }
        }

例如,对于大小等于5的向量,std :: distance为8!

为什么呢?我的代码中的错误在哪里?

1 个答案:

答案 0 :(得分:1)

正如Quentin在评论中所写,std::vector boost::tuple #include <algorithm> #include <iostream> #include <vector> #include <string> #include <boost/tuple/tuple.hpp> int main() { using tup_t = boost::tuple<int,std::string, std::string, std::string>; std::vector<tup_t> games{ boost::make_tuple(2, "hello", "world", "bye"), boost::make_tuple(1, "foo", "bar", "baz")}; auto found = std::find_if( std::begin(games), std::end(games), [](const tup_t &t){ return boost::get<0>(t) == 1; }); std::cout << std::distance(std::begin(games), found) << std::endl; if(found != std::end(games)) games.erase(found); } 可以使用std::find_if进行搜索,就像任何其他类型一样。

  

但是,我还希望在向量中找到此元素的确切位置,以便稍后删除它。

请注意,std::vector::erase允许您通过迭代器擦除元素。

return redirect()->away('http://sample.com/url?param=param')