lsmCC 发表于 2023-12-6 22:26:16

为什么没有重载小于号会报错呢

#include <bits/stdc++.h>
using namespace std;
struct Node
{
    char c;
    int pos;
    bool operator <(const Node &o)const
    {
      return pos<o.pos;
    } //位置从大到小
};
vector<Node> up,low,ans;

void solve()
{
    string s,a;
    cin>>s;
    up.clear();
    low.clear();
    ans.clear();
    for(int i=0;i<s.size();i++)
    {
      if(islower(s))
      {
            if(s=='b')
            {
                if(!low.empty())low.pop_back();
               
            }
            else
            {
                low.push_back(Node{s,i});
            }

      }
      else
      {
            if(s=='B')
            {
                if(!up.empty())up.pop_back();

            }
            else
            {
                up.push_back(Node{s,i});
            }
      }
    }
    for(int i=0;i<up.size();i++)
    {
      ans.push_back(up);
    }
    for(int i=0;i<low.size();i++)
    {
      ans.push_back(low);
    }
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++)
    {
      cout<<ans.c;
    }
    cout<<endl;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        


   
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
      solve();
    }
}

FishC_GPT 发表于 2023-12-6 22:26:44

在你的代码中,报错的原因是因为没有正确重载小于号运算符。

在结构体`Node`中,你声明了一个名为`s`的函数。然而,在C++中,小于号运算符应该重载为成员函数或者全局函数,而不是普通的成员函数。

以下是一个示例,展示了如何正确地重载小于号运算符:

#include <iostream>
using namespace std;

struct Node
{
    char c;
    int pos;
   
    // 成员函数形式的重载
    bool operator<(const Node& other) const
    {
      return pos < other.pos;
    }
};

int main()
{
    Node node1{'a', 1};
    Node node2{'b', 2};
   
    if (node1 < node2)
    {
      cout << "node1小于node2" << endl;
    }
    else
    {
      cout << "node1大于等于node2" << endl;
    }
   
    return 0;
}

在上述代码中,我们将小于号运算符重载为成员函数`operator<`。在重载中,我们通过比较两个节点的`pos`成员变量来判断它们的大小关系。

希望这样能帮助到你解决问题!如果还有其他疑问,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 为什么没有重载小于号会报错呢