2011-08-30 57 views
2

類的成員,我有一個類定義爲訪問使用矢量

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

回答

2

除非我錯誤地解釋了你的問題,這很簡單。

  • it是在Employee向量上的迭代器。
  • *itEmployee
  • 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,它映射員工的LevelEmployee

+0

謝謝:)我在找'it->' – vivekv80

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"; 
+0

我強烈建議不要從const成員返回引用。從非const版本返回引用,從const函數返回const引用。 –

+0

如果您從非const成員返回引用,則該對象也可能是公共的。如果它是私密的,你不需要那個。只需執行const參考版本。 –

+0

如果你打算從const方法返回一個引用,你最好返回一個'const'引用。 – Tim

4

如果您想從迭代器訪問Employee的成員,您可以使用成員訪問運算符->

the_map[it->level()] = blah;