在矢量中搜索对象
Search for objects within a vector
我正试图在代码中找到一种方法来搜索我使用的Vectors中的对象。我已经将信息推回到不同的向量中,并且我知道显示信息的.size。我希望用户能够输入银行账号,然后如果这是正确的,则显示其他矢量的内容。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//declaring four vectors
std::vector<string>names;
std::vector<string>address;
std::vector<int>age;
std::vector<double>accountnumber;
//forward declaration of functions
void namesInput ();
void addressInput ();
void ageInput ();
void accountnumberInput ();
int main()
{
//variable for switch statement
int choice;
system("title HSBC Online Banking");
system("color B6");
cout << "Please select from the following options" << endl;
cout << "----------------------------------------" << endl;
cout << "1. Enter profile " << endl;
cout << "2. Search for client " << endl;
cout << "3. Exit" << endl;
cin >> choice;
switch(choice)
{
case 1:
//calling functions for first switch case
namesInput ();
addressInput ();
ageInput ();
accountnumberInput ();
system("cls");
break;
case 2:
break;
case 3:
system("exit");
break;
}
return 0;
}
void namesInput ()
{
system("cls");
for (int i = 1; i <= 3; i++)
{
string temp;//variable to give to vector
cout<<"Enter " << i << " first, middle and last names : ";
cin>>temp;
names.push_back(temp);//push back into vector
}
}
void addressInput ()
{
system ("cls");
for (int i = 1; i <= 3; i++)
{
string temp;//variable to give to vector
cout<<"Enter " << i << " House Number, Street, Postcode : ";
cin>>temp;
address.push_back(temp);//push back into vector
}
}
void ageInput ()
{
system ("cls");
for (int i = 1; i <= 3; i++)
{
int temp;//variable to give to vector
cout<<"Enter " << i << " Day, Month, Year : ";
cin>>temp;
age.push_back(temp);//push back into vector
}
}
void accountnumberInput ()
{
system ("cls");
for (int i = 1; i <= 1; i++)
{
int temp;//variable to give to vector
cout<<"Enter " << i << " Account Number ";
cin>>temp;
accountnumber.push_back(temp);//push back into vector
}
main ();
}
void findClient ()
{
cout << "To find a client please enter their account number" << endl;
}
std::vector<double>accountnumber;
对我来说,使用双作为账号是否是一个不错的选择:您可能需要使用std::string
。
例如:请注意,双打之间的"精确"比较是不可能的(因此使用双打作为关键字搜索账号是有问题的);相反,您可以使用字符串来完成此操作。
因此,假设您使用vector<string>
作为帐号,您可以使用std::find()
在矢量中查找给定的帐号位置,例如:
auto it = find(accountNumbers.begin(), accountNumbers.end(),
accountNumberToFind);
if (it != accountNumbers.end())
{
... Found, process it ...
}
一旦找到帐户的迭代器,就可以使用简单的指针/迭代器算法(如(it - accountNumbers.begin())
)从中获得基于向量0的索引。
然后,给定该索引,您可以访问其他向量中的相应项。
然而,从面向对象的设计角度来看,我更喜欢为帐户定义一个类,包含多个字段,如帐号、名称、地址等,并具有单个vector<Account>
(而不是单个帐户属性的多个向量)。
我建议您重新访问代码的某些部分,但是,根据您的代码,您可以执行以下操作:
void lookForAccount(){
system ("cls");
for (int i = 1; i <= 1; i++)
{
int temp;//variable to give to vector
cout<<"Enter " << i << " Account Number you want to look for";
cin>>temp;
for(int j = 0;j<accountnumber.size();j++){
if(accountnumber[j]==temp){
cout<<"account number: "<<accountnumber[j]<<", name: "<<names[j]<<"etc..."<<endl;
}
}
}
main ();
}
无论如何,我建议使用迭代器和std::find来代替这个伪方法。
然而,正如评论中所指出的,由于以下几个原因,此代码容易出现错误:按双倍方式处理帐号不是最佳选择。此外,我建议重新设计您的代码,以使用C++对象处理所有帐户信息。
相关文章:
- 在对象数组中搜索字符串并返回相应值的函数
- 在C++代码中搜索对象的实例化位置
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 在 c++ 上搜索结构中的对象
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 将字符串与二叉搜索树中的对象进行比较
- C++ 在 std::set 的嵌套对中搜索对象
- 从对象向量中搜索变量
- 哪种数据结构是在一个向量中搜索和计数对象对的最佳数据结构
- 按属性搜索对象的向量并返回迭代器
- 如何通过对象向量搜索匹配项
- 在矢量中搜索对象的任何实例时出错
- 对大于属性的元素的矢量对象进行二进制搜索
- 在二叉搜索树中搜索对象
- 在矢量中搜索对象
- 如何搜索对象指针列表?C++
- 搜索对象指针的向量
- C++11搜索对象的向量
- 如何在所需像素之间搜索对象
- 按对象数据成员属性搜索对象的向量