我正在使用map
实现一个类,就像这样:
class Letras {
typedef std::pair<int, int> p_c;
std::map<char, p_c> bolsa;
public:
...
};
我想实现迭代器的功能,就像这样使用:
Letras l;
Letras::iterator it;
for ( it = l.begin(); it != l.end(); ++it )
cout << *it << endl;
以便从char
第一个组件(键)中打印出std::map
。
谢谢。
Letras
Letras
是一个类,它实现类似Scrubble的字母集,map
用于表示一组 letras (字母西班牙语),如下所示:
{{letter_1, {quantity_1, score_1}}, {letter_2, {quantity_2, score_2}}, ..., {letter_n, {quantity_n, score_n}}}
letter_i
是集合中的某个字母,quantity_i
是该字母在集合中的次数(类似杂乱的字母集可以具有各种相同的字母),而{{1 }}是字母得分。
我之所以使用地图,是因为字母只能具有一个相关的分数,因此在本课程中,score_i
。
i != j => letter_i != letter_j
的实用程序是从Letras
类( dictionary )(该类已实现DAWG结构)中找到由某个字母集形成的最佳单词。快速搜索和查找。
答案 0 :(得分:1)
您可以执行以下操作:
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
class Letras {
private:
typedef std::pair<int, int> p_c;
std::map<char, p_c> bolsa;
public:
class iterator {
private:
std::map<char, p_c>::iterator it;
public:
iterator(const std::map<char, p_c>::iterator &it) {
this->it = it;
}
// EDIT: Removing Copy Semantics
iterator(const iterator &it) = delete;
iterator &operator =(const iterator &it) = delete;
// EDIT: Enabling Move Semantics
iterator(iterator &&it) = default;
iterator &operator =(iterator &&it) = default;
auto &operator *() const {
return it->first;
}
iterator &operator ++(int) {
this->it++;
return *this;
}
bool operator !=(const iterator &it) {
return this->it != it.it;
}
};
auto begin() {
return iterator(bolsa.begin());
}
auto end() {
return iterator(bolsa.end());
}
void insert(const std::pair<char, p_c> &p) {
bolsa.insert(p);
}
};
int main() {
Letras b;
b.insert(make_pair('f', make_pair(1, 2)));
b.insert(make_pair('g', make_pair(1, 2)));
b.insert(make_pair('h', make_pair(1, 2)));
for (auto it = b.begin(); it != b.end(); it++) {
cout << *it << endl;
}
return 0;
}