在Vector中查找元素对

Find pairs of elements in Vector

本文关键字:元素 查找 Vector      更新时间:2023-10-16

我有以下向量。V = {1,2,3,4}我想找到所有成对的元素。总共我会有K(K-1)/2对元素。


对={1,2},{1,3},{1,4},{2,3},{2,4},{3,4}。

Formula: K(K-1)/2 = 4(4-1)/2 = 6 pairs

这个算法的伪代码应该是什么。


谢谢你的帮助。我写了代码,它可能会对未来的某个人有所帮助:

伪代码:dasblinkenlight

for i in [0..N)
    pair.first = data[i]      // Set the first element
    for j in (i..N)
        pair.second = data[j] // Set the second element

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    typedef pair<int,int> pairs;
    pairs p;
    vector<pairs> pVec;
    for(size_t i = 0; i < v.size();i++)
    {
        p.first = v[i]; // Set the first element
        for(size_t j = i+1; j < v.size();j++)
        {
            p.second = v[j];// Set the second element
            pVec.push_back(p); // Add p to vector
        }
    }
    // Print pairs 
    for(size_t i = 0; i < pVec.size();i++)
    {
        cout <<"{"<< pVec[i].first <<"  "<<pVec[i].second <<"}" <<", ";
    }
    return 0;
}

以下是关于如何做到这一点的一般想法:

  • 有两个候选N作为对中的第一个成员
  • 当成员k被选择为该对的第一个成员时,有N-k候选作为该对的第二个成员
  • 您可以使用两个嵌套循环生成所有对
  • 用级数和步数为1的公式,可以证明对的总数是N*(N-1)/2

以下是如何使用两个循环:

for i in [0..N)
    pair.first = data[i]      // Set the first element
    for j in (i..N)
        pair.second = data[j] // Set the second element

注意:上面的代码使用数学符号表示区间,其中方括号表示区间中包含相应的结束,圆括号表示排除相应的结束。