[英]access a member of class using vector
我有一個定義為的類
typedef std::string Name;
typedef int Age;
typedef std::string Level;
class Employee
{
public:
// Employee (arguments);
// virtual ~Employee ();
void name(Name const & name) { name_ = name; }
Name name() const { return name_; }
void age(Age const & age) { age_ = age; }
Age age() const { return age_; }
void level(Level const & level) { level_ = level; }
Level level() const { return level_; }
private:
Name name_;
Age age_;
Level level_;
};
std::vector<Employee> read_file(std::string filename);
std::vector<Employee> employees = read_file("data.txt");
std::cout << employees.size() << std:: endl;
for(std::vector<Employee>::iterator it = employees.begin(); it != employees.end(); ++it)
{
std::cout << *it << std::endl;
}
有沒有辦法讓我使用上面定義的這個向量訪問Employee類的成員? 我想構建一個以雇員級別作為鍵值的map
容器。
如果要從迭代器訪問Employee
成員,可以使用成員訪問運算符->
:
the_map[it->level()] = blah;
const Name name = it->name();
const Age age = it->age();
const Level level = it->level();
要么
const Name name = employees[i].name();
const Age age = employees[i].age();
const Level level = employees[i].level();
會很好的。
但是,我強烈建議您將上述每個項目作為參考返回,因為它通常比制作對象的副本快得多。
即
class Employee
{
public:
// Employee (arguments);
// virtual ~Employee ();
void name(Name const & name) { name_ = name; }
Name& name() { return name_; }
const Name& name() const { return name_; }
void age(Age const & age) { age_ = age; }
Age& age() { return age_; }
const Age& age() const { return age_; }
void level(Level const & level) { level_ = level; }
Level& level() { return level_; }
const Level& level() const { return level_; }
private:
Name name_;
Age age_;
Level level_;
};
然后,您可以通過引用訪問值,如下所示:
const Name& name = it->name();
const Age& age = it->age();
const Level& level = it->level();
這也意味着你可以改變這樣的值:
it->name() = "Goz";
it->age() = 33;
it->level() = "Programmer";
除非我誤解你的問題,否則這很簡單。
it
是Employee
向量的迭代器。 *it
是Employee
it->
允許您訪問該Employee
成員
it->name()
因此,如果您要為Employee
構建員工級別的地圖,您可以這樣做:
std::map<Level, Employee> employeeMap;
for(std::vector<Employee>::iterator it = employees.begin();
it != employees.end();
++it)
{
employeeMap[ it->level() ] = *it;
}
現在您擁有了employeeMap,它將員工的Level
映射到Employee
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.