标签: std-pair

如何基于 .first 值从 std::pair 的 std::vector 中删除元素?

好的,所以我有一个排序的std::vector<std::pair<int,double>>. 我似乎无法找到的是如何根据 std::pair (int) 的“第一个”元素的值从向量中删除条目。我可能会在我的算法中多次执行此操作,因此我不想每次都遍历向量(其中可能包含多达一百万个条目)。我知道我们可以使用 std::erase 或 remove 轻松删除基于索引的元素,但是有没有办法根据对的第一个元素的值来执行此操作?或者我们可以获取该元素的索引然后使用 std::erase 吗?

注意: std::pair 的第一个元素的值对于向量是唯一的。鉴于程序的限制,我需要使用向量(即不能使用地图或不同的容器)。

示例:我有一个容器:

std::vector<std::pair<int,double>> vec = { {20, 60.3}, ... {10, -20.2}, {1020, -80.9}};
Run Code Online (Sandbox Code Playgroud)

我想从向量中快速删除第一个元素 == 10 的元素,但我不知道它位于向量的哪个索引处。

c++ stdvector std-pair

1
推荐指数
1
解决办法
172
查看次数

c ++对模板结构声明歧义!

在c ++中对类的定义中有两个typedef.它们是为了什么?在代码中没有使用它们!

template <class T1, class T2> struct pair
{
  typedef T1 first_type;
  typedef T2 second_type;

  T1 first;
  T2 second;
  pair() : first(T1()), second(T2()) {}
  pair(const T1& x, const T2& y) : first(x), second(y) {}
  template <class U, class V>
    pair (const pair<U,V> &p) : first(p.first), second(p.second) { }
}
Run Code Online (Sandbox Code Playgroud)

c++ templates definition ambiguity std-pair

0
推荐指数
2
解决办法
597
查看次数

从`const char*[2]`转换为pair <string,string>

我有一个Visual Studio 2008 C++应用程序,其中包含一个const char*[2]我想要转换为a的参数std::pair< std::string, std::string >.有一个简单的方法吗?

例如:

typedef std::pair< std::string, std::string > Group;
const char* a[ 2 ] = { "buzz", "foo" };
Group z = a; // ???

// a->first.c_str() == "buzz"
// a->second.c_str() == "foo"
Run Code Online (Sandbox Code Playgroud)

谢谢,PaulH

c++ string stl std-pair

0
推荐指数
1
解决办法
267
查看次数

在标准C中使用pair和make_pair

有没有办法在C中使用std :: pair和std :: make_pair?似乎它们适用于C++.

就像我用的那样

#include "utility"
Run Code Online (Sandbox Code Playgroud)

它说它找不到这样的文件

thansk任何建议

c utility std-pair

0
推荐指数
1
解决办法
503
查看次数

如何更改pair(>和<)运算符的行为?

我正在尝试排序vector< pair<int,char> >但我想改变对类型的比较运算符的行为,这样如果第一个值相等并且它与(>)运算符进行比较,我希望它将第二个值与(<)运营商.

我正在努力解决" 什么是密码分析?" 关于uva的问题.这是我的方法:

string toLower(string in){
    string out;
    for(int i=0;i<in.length();i++){
        if(in.at(i)<='Z' && in.at(i)>='A'){
            out+=in.at(i)+('a'-'A');
        }
        else if(in.at(i)<='z' && in.at(i)>='a'){
            out+=in.at(i);
        }
    }
    return out;
}


int main(){
    //freopen("in.txt","r",stdin);
    //freopen("tmp.txt","w",stdout);
    vector< pair<int,char> >vp;
    pair<int,char> tp;

    for(char a='a';a<='z';a++){//buliding a table of values and chars
        tp= make_pair(0,a);
        vp.push_back(tp);
    }
    int T;
    cin >> T;
    string s;
    cin.ignore();
    for(int i=0;i<T;i++){
        getline(cin,s);
        s=toLower(s);//remove special chars and convert all to lower
        int l=s.length();
        for(int j=0;j<l;j++){
            vp[s[j]-'a'].first+=1;//increasing the value of each …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading std-pair

0
推荐指数
2
解决办法
177
查看次数

在std :: pair中使用数组来扩展数据量

我正在尝试扩展别人的代码,它经常使用std :: queue和std :: pair类型.对于下面的代码,我需要扩展std :: pair.second中的变量数量,并希望它对于像数组这样的变量数量更加灵活(以便将来修改).

someClass->myQueue.push(std::pair<T1,uint64_t>(var1, var2));
Run Code Online (Sandbox Code Playgroud)

所以我尝试做类似的事情:

someClass->myQueue.push(std::pair<T1,uint64_t[N]>(var1,{e1,e2,...,eN}));
Run Code Online (Sandbox Code Playgroud)

在修改代码中的相关定义等后,我得到了以下错误和警告,我对此一无所知.然而,听起来这不是进行这种修改的适当方式.

myArray = myQueue.front().second; 
        ^
error: invalid array assignment
...
someClass->myQueue.push(std::pair<T1,uint64_t[N]>(var1,{e1,e2,...,eN}));
                                                                    ^
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
Run Code Online (Sandbox Code Playgroud)

我在网上看到了元组和std :: pair作为解决方案的递归用法,但我想对代码进行最小的更改,因为几个类将受此影响.这样做的正确方法是什么?

谢谢

c++ stdmap std c++11 std-pair

0
推荐指数
1
解决办法
101
查看次数

c ++(不是> = 11),初始化地图中的嵌套对

在我不应该用-std = c ++ 11编译的限制下,我想在以下变量中添加一个额外的变量,

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<bool, bool>
    >
  >
>
temp;
Run Code Online (Sandbox Code Playgroud)

并据此调整其初始化:

for (int i=0; i<100; ++i)
  {
    temp[i][i]=
      std::pair<
        std::pair<int, int>,
        std::pair<bool, bool>
        >
      > (
          std::pair<int, int> (intsX[i], intsY[i]),
          std::pair<bool, bool> (boolsX[i], boolsY[i])
        );
  }
Run Code Online (Sandbox Code Playgroud)

我想将结构更改为:

std::map<unsigned,
  std::map<unsigned,
    std::pair<
      std::pair<int, int>,
      std::pair<
        std::pair<bool, bool>,
        double
      >
    >
  >
>
temp;
Run Code Online (Sandbox Code Playgroud)

现在,我不知道如何更改初始化,例如......

for (int i=0; i<100; ++i)
  {
    temp[i][i]=
      std::pair<
        std::pair<int, int>,
        std::pair<
          std::pair<bool, bool>,
          double
        >
      > (
          std::pair<int, int> (intsX[i], intsY[i]),
          std::pair<std::pair, …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap c++03 std-pair

0
推荐指数
1
解决办法
144
查看次数

在API设计中,我应该何时更喜欢长度为2 std :: tuple?

我正在写一个小型库,它有一些API函数返回两个东西(不同类型).我宁愿不为此声明一个结构; 所以我想回来一个std::pair<foo, bat>.但是 - 也许在这些现代时代我宁愿回来std::tuple<foo, bar>呢?

更一般地说,什么时候应该优先选择元组,何时配对更合适的构造?

c++ idiomatic c++11 stdtuple std-pair

0
推荐指数
1
解决办法
260
查看次数

如何在C++中访问对?

我不知道如何更恰当地命名这个问题,但基本上就是这样:

我做了一对pair<int, int> P[20000]和我使用P.firstP.second,但...

当我尝试输入P.first时,就像cin >> P.first[i](我是计数器)一样,它不会让我.它在编译时调用错误.我该如何解决?

编辑:得到了我之前的问题的答案,但新的问题:我正试图在P.second上运行降序排序

sort(P.second, P.second + x, greater<int>());
Run Code Online (Sandbox Code Playgroud)

但它会导致另一个编译错误.我理解为什么会这样,但我该如何解决它.基本上,说对是{{0,0}, {3,2}, {4,-1}, {5,1}}我想要的结果是{{3,2}, {5,1}, {0,0}, {4,-1}}.

我该怎么做呢?

c++ std-pair

0
推荐指数
1
解决办法
144
查看次数

"' - >'的基本操作数有非指针类型"但它是指针

这是我的代码.(我简化了这一点,通常有很多成员函数,但错误仍然相同,所以我简化了它.)

template <class K,class V>
class MyMap:public MySet<pair<K, V> >{};

int main(void){

    MyMap<int,int> map1;

    MyMap<int,int>::MyIterator it;

    it=map1.begin();

    cout<<it->first<<endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates stl std-pair

0
推荐指数
1
解决办法
618
查看次数