查找boost元组向量中元素的位置



我正在迭代boost::元组的向量,以找到一个元素。然而,我也想找到这个元素在向量中的确切位置,以便稍后删除它。这是代码,但是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::距离为8!

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

正如Quentin在评论中所写的那样,boost::tuple s中的std::vector可以用std::find_if来搜索,就像任何其他类型一样。

然而,我也想找到这个元素在向量中的确切位置,以便稍后删除它。

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

 #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);
 }

相关内容

  • 没有找到相关文章

最新更新