如何清除向量中除特定范围内的最大元素以外的所有元素?

用户名

假设我有以下向量:

向量是成对的向量,我们基于第一个元素进行比较。

[(1,0),(0,1),(3,2),(6,3),(2,4),(4,5),(7,6),(5,7)]

我想删除特定范围内的所有元素,但最大的除外。

例如,如果范围是$ l = 2 $和$ r = 5 $,则输出:

[(1,0),(0,1),(6,3),(7,6),(5,7)]

现在,如果我们再次对输出数组执行以下操作:$ l = 1 $,$ r = 4 $,则输出:

[(1,0),(7,6)]

我发现对我很有用,但是我不知道如何使其成对使用。

这是我的尝试:

int main(int argc, char const *argv[]) {
    int N;
    cin >> N;
    vector< pair<int,int> > vector_of_pairs(N);

    for (int i = 0; i < N; i++) {
        int input;
        cin >> input;
        vector_of_pairs[i] = make_pair(input, i);
    }

    int l, r;
    cin >> l >> r;

    int max_in_range = vector_of_pairs[l].first;

    for (int i = l+1; i <= r; i++) {
        if (vector_of_pairs[i].first > max_in_range) {
            max_in_range = vector_of_pairs[i].first;
        }
    }

    for (int i = l; i <= r; i++) {
        if (vector_of_pairs[i].first != max_in_range) {
            vector_of_pairs.erase(vector_of_pairs.begin() + i);
        }
    }

    printf("[");
    for(int i = 0; i < vector_of_pairs.size(); i++) {
        printf("(%d,%d)", vector_of_pairs[i].first, vector_of_pairs[i].second);
    }
    printf("]\n");
}

对于以下输入:

8              
1 0 5 6 2 3 7 4 
1 3

这是输出:

[(1,0)(5,2)(6,3)(3,5)(7,6)(4,7)]

但这应该是

[(1,0)(6,3)(3,5)(7,6)(4,7)]

另外,对于某些输入,我会遇到段错误,那么我该如何防范呢?

希里希什·戈雅尔

可能你想要这个

#include <iostream>
#include <vector>
using namespace std;


int main(int argc, char const *argv[]) {
    int N;
    cin >> N;
    vector< pair<int,int> > vector_of_pairs(N);

    for (int i = 0; i < N; i++) {
        int input;
        cin >> input;
        vector_of_pairs[i] = make_pair(input, i);
    }

    int l, r;
    cin >> l >> r;

    int max_in_range = vector_of_pairs[l].first;

    for (int i = l+1; i <= r; i++) {
        if (vector_of_pairs[i].first > max_in_range) {
            max_in_range = vector_of_pairs[i].first;
        }
    }
    int p=l;
    for (int i = l; i <= r;i++ ) {
        if (vector_of_pairs[p].first != max_in_range) {
            vector_of_pairs.erase(vector_of_pairs.begin()+p);
        }
        else p++; 
    }

    printf("[");
    for(int i = 0; i < vector_of_pairs.size(); i++) {
        printf("(%d,%d)", vector_of_pairs[i].first, vector_of_pairs[i].second);
    }
    printf("]\n");
}

获取正确的输出:

[(1,0)(6,3)(2,4)(3,5)(7,6)(4,7)]

说明:当您删除矢量中的项目时,在删除的元素之后出现的项目的索引将减少1。因此,在从l到r的ith循环中,您不应删除vec.begin()+ i元素,而应删除vec。 begin()+ l项目,直到找到最大元素为止;找到最大元素后,删除vec.begin()+ l + 1元素。

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何选择除具有特定类的div内的那些元素以外的所有元素

如何使节点列表中除目标元素以外的所有元素消失?

如何从数组中删除除最后N个元素以外的所有元素?

如何选择除ith元素以外的数组中的所有其他值?

选择除具有特定类的最后一个元素以外的所有元素

替换2D数组特定行中除最后一个元素以外的所有元素

如何从数组中删除除JavaScript中的第一个元素以外的所有元素

如何在Matlab中获取矩阵的除第一个元素以外的所有元素?

Elixir-如何获取除列表中的最后一个元素以外的所有元素?

我如何使用jQuery获取除最后一个元素以外的所有元素

在jQuery中隐藏某个类的除一个元素以外的所有元素

使用jQuery禁用除表单中的某些元素以外的所有输入元素

从某个类中获取除元素以外的所有元素?

获取文档中除id为'main-nav'的元素以外的所有元素。

c++ - 如何清除向量中除向量中的最后一个元素外的所有元素

如何更改除數組中的第一個元素以外的所有元素以僅顯示差異

正则表达式匹配除具有特定属性的元素以外的所有其他元素

Angular 2 Dart:如何检测除元素以外的所有内容?

如何“或”数组范围内的所有元素

删除Java中除某些DOM元素以外的所有内容?

在Swift中推进范围内的所有元素?

在Shiny Application中过滤数据时,长度长度为1的字符向量(除第一个元素以外的所有字符)将被忽略错误

在给定范围内的未排序数组中查找最大元素[是否允许预处理]?

JavaScript遍历类元素,然后选择除单击的元素以外的所有元素

有什么方法可以选择.on()函数中除一个元素以外的所有元素

如何使用jQuery隐藏除最后一个元素以外的所有元素(按类)

PHP:从关联数组中删除除最后两个元素以外的所有元素

如何递归地从泛型列表中获取范围内的所有元素?

对除最后一个元素以外的所有元素应用border-right