0

2次元配列のように2次元ベクトルに割り当てる方法がわかりません。配列

MyArray[0][1] = "User";
MyArray[1][1] = "Pass";

ベクトルでは、プッシュバックなどを使用する必要があるかどうかはわかりませんが、ベクトル「[1][]」内の2番目のスポットに割り当てることができる必要がありますが、持っていない方がいいですベクトルのサイズを変更してから、可能であればそれに割り当てます。

マイコード

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdlib.h>

using namespace std;

vector<vector <string> > UserPass(2,vector <string> (1));
string User, Pass;
string lower(string var);
string resetInput;
string input;
int x;
int y;
void initUsers();
void prompt();
void password();
void login();
bool loginSuccess;


int main()
{
    initUsers();
    prompt();
    return 0;
}

void initUsers() {
    UserPass[0][0] = "admin";
    UserPass[1][0] = "admin";
}

void addUser(string User, string Pass) {
\\This is where I would add onto the vector
}

string lower(string var) {
    transform(var.begin(),var.end(),var.begin(), ::tolower);
    return var;
}

void login() 
{
    cout << "Please Enter your Username\n";
    cin >> User; 

    lower(User);
    cout << "Please Enter your Password\n";
    cin >> Pass;

    for (unsigned x = 0; x < 1; x++) {
        for (unsigned y = 0; y < UserPass.size(); y++) {
            if ((User == UserPass[x][y]) && (Pass == UserPass[x+1][y])) {
                loginSuccess = true;
                cout << "You have successfully logged in to your account." << endl;
                break;
            }
        }
    }
    if (loginSuccess == false) {
            cout << "Incorrect password or username.\n";
    }
}

void password()
{
    while(true) {
        cout << "Reset your Password to: \n";
        getline(cin, resetInput);

        UserPass[x+1][y] = resetInput;
        cout << UserPass[x+1][y] << " is now your new password\n";
        break;
    }
}

void prompt() 
{
    while(true){
        cout << ">";
        getline(cin,input);

        lower(input);
        if (input == "login" && loginSuccess == true) {
            cout << "You are already logged in as <" << User << ">" << endl;
        }
        if (input == "login" && loginSuccess == false) {
            login();
        }
        if ((input == "logout" && loginSuccess == false) or (input == "password" && loginSuccess == false)) {
            cout << "You have not logged in yet.\n";
       }
       if (input == "logout" && loginSuccess == true) {
           loginSuccess = false;
           cout << "You have successfully logged out.\n";
       }
       if (input == "password" && loginSuccess == true) {
           password();
       }
       if (input == "exit") {
           exit(EXIT_SUCCESS);
       }
       if (input == "clear"){
            system("cls");
      }
   }
}
4

2 に答える 2

1

ベクトルの代わりにマップを使用する必要があるようです。あなたのキーはユーザーであり、関連する値はパスワードである可能性があります。これにより、すべてのユーザーでの O(N) ループが回避されます。ベクトルの使用を設定している場合、最上位のベクトルには 2 つの値しかないように見えるため、構造体 (またはペア) の単一のベクトルをそれぞれユーザーとパスで使用することもできます。

于 2015-04-05T21:02:13.470 に答える
0

ユーザーとそのパスワードをベクトルに追加する場合、関数は次のようになります

void addUser( const std::string &User, const std::string &Pass ) 
{
    UserPass.push_back( { User, Pass } );
}
于 2015-04-05T21:07:20.037 に答える