C++ 在cplusplus中对结构成员排序时获取错误或垃圾

C++ 在cplusplus中对结构成员排序时获取错误或垃圾,c++,C++,在cplusplus中对结构成员进行排序时获取错误或垃圾 我想使用c/c++中的结构,根据2d数组的第一个值对数组进行排序。我收到垃圾或运行时错误。我无法使用气泡排序对数组进行排序,我不知道如何处理它 这是我的密码 #include <bits/stdc++.h> using namespace std; struct x { int l[100][3]; }; int main() { int n, k, i, j; cin>>n>

在cplusplus中对结构成员进行排序时获取错误或垃圾

我想使用c/c++中的结构,根据2d数组的第一个值对数组进行排序。我收到垃圾或运行时错误。我无法使用气泡排序对数组进行排序,我不知道如何处理它

这是我的密码

#include <bits/stdc++.h>
using namespace std;

struct x {
    int l[100][3];
};

int main()
{   
    int n, k, i, j;
    cin>>n>>k;
    struct x o[n], p;
    
    for(i=0;i<n;++i) {
        cin>>o[i].l[i][0]>>o[i].l[i][1];
    }
    
    for(i=0;i<n;++i) {
        for(j=0;j<n-i-1;++j) {
            
            if((o[j].l[j][0])>(o[j+1].l[j+1][0])) {
            //cout<<o[j].l[j][0]<<" "<<o[j+1].l[j+1][0]<<"\n";
                p = o[j];
                o[j] = o[j+1];
                o[j+1] = p;
            }
        }
    }
    
    for(i=0;i<n;++i) {
        for(j=0;j<2;++j) {
            cout<<o[i].l[i][j]<<" ";
        }
        cout<<"\n";
    }
    
    return 0;
}
#包括
使用名称空间std;
结构x{
int l[100][3];
};
int main()
{   
int n,k,i,j;
cin>>n>>k;
结构xo[n],p;
对于(i=0;i>o[i].l[i][0]>>o[i].l[i][1];
}

对于(i=0;i我将根据我的理解给你一个试用版。如果我错误地理解了你的逻辑,请发一声

首先,我构建了一个包含3个整数的结构'int3',并使用一些实用程序来简化编码,然后在结构'xxx'(您的'x')中构建了一个大小为100的'int3'数组。请注意,'operator[I]`返回第I个元素的'xxx[I].p[0]','operator(I)`返回'int3 p[3]`用于交换。两个运算符都有'rvalue'和'lvalue'版本。 结构:`int3`和`xxx`

#include <iostream>
struct int3
 { int p[3];
   int3() = default;
   int3(const int3&a) {for (int i=0; i<3; i++) p[i]=a.p[i]; }
   int3& operator=(const int3&a) = default;
   void print() { std::cout <<"("<< p[0] <<", "<<p[1] <<") "; }
};
struct xxx {
    int3 s[100];
    int operator[](const int i) const {return s[i].p[0];}
    int3 operator()(const int i) const {return s[i];}
    int&operator[](const int i) {return s[i].p[0];}
    int3&operator()(const int i) {return s[i];}
    void print(const int n) {
       for(int i=0; i<n; i++) {
          std::cout << "No " << i << " = ";
          s[i].print();
          std::cout << std::endl;
        }
    }
};

祝你好运!

我无法编译你的程序。请阅读,你的数据结构看起来很奇怪。你只使用了这样的
o[j].l[j][0])
,即
o的索引=
l的索引。那么
l[100]的作用是什么呢
在结构中
x
?由于'o'的索引总是与它的成员'l'相等,我猜您不需要'o'中的数组。此外,程序中没有使用输入数据'k'。
int main()
{
    int n, k, i, j;
    xxx ox;
    int3 q;
    std::cout << "input n = ";
    std::cin >> n;
    while (n>100) {
           std::cerr << "Array out of range!\n";
           std::cout << "input n = ";
           std::cin >> n;
          }
   for(i=0;i<n;++i) {
           std::cout << "a[" << i << "].p[0] ,p[1] = ";
           std::cin >> ox.s[i].p[0] >> ox.s[i].p[1];
          }
 std::cout << "****input list:\n"; ox.print(n);
 for(i=0;i<n;++i) {
    for(j=0;j<n-i-1;++j) {
         if( ox[j] > ox[j+1] ) {
              q = ox(j);
              ox(j) = ox(j+1);
              ox(j+1) = q;
            }
       }
   }
 std::cout << "****sorted list:\n"; ox.print(n);
 return 0;
}
$ ./a.exe
input n = 5
a[0].p[0] ,p[1] = 5 5
a[1].p[0] ,p[1] = 7 7
a[2].p[0] ,p[1] = 3 3
a[3].p[0] ,p[1] = 8 8
a[4].p[0] ,p[1] = 4 4
****input list:
No 0 = (5, 5)
No 1 = (7, 7)
No 2 = (3, 3)
No 3 = (8, 8)
No 4 = (4, 4)
****sorted list:
No 0 = (3, 3)
No 1 = (4, 4)
No 2 = (5, 5)
No 3 = (7, 7)
No 4 = (8, 8)