插入双向量

时间:2015-05-20 09:47:42

标签: c++ vector

insert是否可以使用vector函数,但就像我们使用push_back一样做一对?

void insert(std::vector<int, std::string>& cont, int value)
{
   std::vector<int>::iterator it = std::lower_bound(
      cont.begin(),
      cont.end(),
      value,
      std::less<int>()
   ); // find proper position in descending order

   cont.insert((it, std::make_pair(value,""))); // insert before iterator it
}

2 个答案:

答案 0 :(得分:1)

std::vector<int,std::string>是不允许的,您可以将其更改为std::vector<std::pair<int,std::string>>

此外

std::vector<int>::iterator it = std::lower_bound(cont.begin(), cont.end(), value, std::less<int>());

应更改为比较对并返回std::vector<std::pair<int,std::string>>::iterator

答案 1 :(得分:0)

该功能可以写成千载难逢的方式

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <string>

std::vector<std::pair<int, std::string>>::iterator  
insert( std::vector<std::pair<int, std::string>> &v, int value, bool before = true )
{
    std::vector<std::pair<int, std::string>>::iterator it;
    std::pair<int, std::string> pair( value, "" );

    if ( before )
    {
        it = std::lower_bound( v.begin(), v.end(), pair );
    }
    else
    {
        it = std::upper_bound( v.begin(), v.end(), pair );
    }

    return v.insert( it, pair );
}

int main() 
{
    std::vector<std::pair<int, std::string>> v { { 1, "A" }, { 2, "B" } };

    for ( const auto &p : v )
    {
        std::cout << p.first << " \"" << p.second << "\"" << std::endl;
    }
    std::cout << std::endl;

    insert( v, 1 );
    insert( v, 1, false );
    insert( v, 2 );
    insert( v, 2, false );

    for ( const auto &p : v )
    {
        std::cout << p.first << " \"" << p.second << "\"" << std::endl;
    }
    std::cout << std::endl;

    return 0;
}

程序输出

1 "A"
2 "B"

1 ""
1 ""
1 "A"
2 ""
2 ""
2 "B"

至于我,我会按以下方式声明该功能

std::vector<std::pair<int, std::string>>::iterator  
insert( std::vector<std::pair<int, std::string>> &v, 
        const std::vector<std::pair<int, std::string>>::value_type &value, 
        bool before = true );