Python 如何将列拆分为不同的向量

Python 如何将列拆分为不同的向量,python,c++,Python,C++,这些数字有两列: 110 2-3 36 3-6 1-5 (数据取自.txt)第一列是客户端的数量,第二列是余额,我需要这样做操作。“对于第一个客户余额等于10-5”,对于第二个客户余额等于-3”。如何将列拆分为不同的向量,例如,如果我知道如何将account更改为vector,这应该很好。我知道在Python中它会像这样: n = int(input()) account = [0]*100 for i in range(n) person, balance = input().spl

这些数字有两列:

110
2-3
36
3-6
1-5

(数据取自.txt)第一列是客户端的数量,第二列是余额,我需要这样做操作。“对于第一个客户余额等于10-5”,对于第二个客户余额等于-3”。如何将列拆分为不同的向量,例如,如果我知道如何将account更改为vector,这应该很好。我知道在Python中它会像这样:

n = int(input())
account = [0]*100

for i in range(n)
    person, balance = input().split()
    person = int(person)
    balance = int(balance)
    account[person-1] += balance

for x in range(len(account)):
    if account[x] != 0:
        print(x+1, account[x]
但是我需要C++。 在这一点上我有类似的东西。它应该检查有多少帐户,并且只显示3个结果

ifstream file2("number.txt");

    vector<int> number;

    int input2;
    while(file2 >> input2)
    {
        number.push_back(input2);
    }

    int person=0,balance=0;
    int account[5];
    for (int i=0; i<number.size(); i+=2)
    {
        person=number[i];
        balance=number[i+1];
        account[person]+= balance;
    }
    for(int i=1; i<6; i++)
    {
        if(account[i]!=0)
        {
            cout << account[i] << endl;
        }
    }
ifstream文件2(“number.txt”);
向量数;
int输入2;
而(文件2>>输入2)
{
数字。推回(输入2);
}
内部人员=0,余额=0;
国际账户[5];

对于(int i=0;i通常,并行数组表示使用
struct
的数组(向量):

struct Client
{
    int id;
    double balance;
};
下一步可能是重载
运算符>>
以在
客户端
实例中读取:

struct Client
{
    int id;
    double balance;
    friend std::istream& operator>>(std::istream& input, Client& c);
};

std::istream& operator>>(std::istream& input, Client& c)
{
    input >> id;
    input >> balance;
    return input;
}
要输入到数据库中,请执行以下操作:

std::向量数据库;
客户c;
while(输入文件>>c)
{
数据库。推回(c);
}
您可以在余额为-5的位置执行搜索操作。
因为浮点不是精确的表示,所以我们可以说,如果差值小于1.0E-5,则数字是精确的

for (int i = 0; i < database.size(); ++i)
{
   double diff = abs(-5 - database[i].balance);
   if (diff < 1.0E-5)
   {
        break;
   }
}
if (i < database.size())
{
    std::cout << "Client " << database[i].id
              << ", balance: " << database[i].balance
              << "\n";
}
for(int i=0;istd::cout如果您确定对于
n
客户,所有客户ID都尊重
0人>>余额)
{
while(account.size()>余额){
账户[人]+=余额;
}
对于(自动和电子:帐户)

你能不能提供一个?让其他人更容易复制整个内容并编译它。错误:
int-account[5];
未初始化(即充满垃圾)。应该是
int-account[5]={};
取而代之。否则,尽管它的设计很差,但您的程序应该适用于示例文件。OP似乎放弃了这个问题,因为即使在18小时前提出了a请求,也没有任何反应。投票关闭。如果文件中的人名数之间存在差距,则第1个版本将不起作用;第2个版本将输出人名任意顺序的ons-可以通过使用
map
而不是
unordered\u map
来修复;第二个版本中的
循环的整个主体仍然可以与第一个版本中的相同:`account[person]+=balance;`.-1,直到您解决这些问题。对于第一个版本,我认为无论间隔有多大,嵌套的
while
都会循环,同时分配足够的内存来存储数据。最后,我们只会有一个空间复杂度
O(m)
其中
m
是客户端ID的最大值。对于第二个版本,在他的问题中没有要求任何顺序。这就是为什么我使用
unordered\u map
which
search
time is
O(1)
而不是使用
map
which
search
time is
O(logn)
for (int i = 0; i < database.size(); ++i)
{
   double diff = abs(-5 - database[i].balance);
   if (diff < 1.0E-5)
   {
        break;
   }
}
if (i < database.size())
{
    std::cout << "Client " << database[i].id
              << ", balance: " << database[i].balance
              << "\n";
}