我有一个定义为
的类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
容器,其中包含员工级别作为键值。
答案 0 :(得分:4)
如果要从迭代器访问Employee
的成员,可以使用成员访问运算符->
:
the_map[it->level()] = blah;
答案 1 :(得分:2)
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";
答案 2 :(得分:2)
除非我误解你的问题,否则这很简单。
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