如何在 c++ 中打印字典?这是我正在运行的代码,我无法使用 printDicionary 方法
Posted
技术标签:
【中文标题】如何在 c++ 中打印字典?这是我正在运行的代码,我无法使用 printDicionary 方法【英文标题】:How can I print a Dictionary in c++ ? This is the code that im running, and I cant get to work the printDicionary method 【发布时间】:2020-05-17 23:33:11 【问题描述】:这是我正在运行的代码,我无法使用 printDicionary 方法。 我不确定如何使用我创建的向量,我想知道如何以这种方式打印所有元素:
[0]:
[1]: (1501, “adiós”), (301, “nuevo”)
[2]:
[3]: (23, “perro”)
…
[5]: (15, “hola”)
…
[9]: (9, “gato”)
#include <iostream>
#include <vector>
using namespace std;
template <class K, class V>
class KeyPair
public:
K key;
V value;
KeyPair()
key=NULL;
value=NULL;
KeyPair(K key, V val)
this->key=key;
this->value=val;
;
template <class K, class V>
class Dictionary
public:
vector<KeyPair<K,V> > *dict;
int positions;
Dictionary()
positions=10;
dict=new vector<KeyPair<K,V> >[positions];
Dictionary(int pos)
positions=pos;
dict=new vector<KeyPair<K,V> >[positions];
void insert(K key, V value)
KeyPair<K,V> kp(key, value);
int hash=key%positions;
for(int i=0; i<dict[hash].size(); i++)
if(dict[hash][i].key==key)
cout<<"llave ya existente"<<endl;
return;
dict[hash].push_back(kp);
//dict//arreglo de vectores keypair
//dict[hash]//vector de keypair
V checkAtKey(K key)
int hash=key%positions;
for(int i=0; i<dict[hash].size(); i++)
if(dict[hash][i].key==key)
return dict[hash][i].value;
return NULL;
void printDictionary()
这是我创建方法的地方
for(int i=0; i<dict[i].size(); i++)
cout << dict.key <<endl;
我不确定这是否是我应该调用 dict 的方式
cout << dict.value <<endl;
return;
;
int main()
Dictionary<int, string> a;
a.insert(5, "perro");
a.insert(4, "gato");
Dictionary<int, string> b;
b.insert(15, "lombriz");
b.printDictionary();
【问题讨论】:
这里有一个简单的方法来弄清楚如何做这种事情。只需拿出一张白纸。用简单的英语用简短、简单的句子写下一个逐步的过程。完成后,call your rubber duck for an appointment。我们总是向您的橡皮鸭提出此类问题。在您的橡皮鸭批准您提出的行动计划后,只需将您写下的内容直接翻译成 C++。任务完成! 分配NULL
仅对指针有意义(取决于编译器,它可能会或可能不会为整数编译)。如果你想用合理的默认值初始化key
和value
,最好简单地做K key; V value;
。另外,如果您知道vector
是什么,为什么要使用new[]
来分配dict
?使用vector<vector<KeyPair<K,V>>> dict;
不是更方便吗?
【参考方案1】:
你的代码有很多错误,伙计。
Dictionary的“kp”成员是一个指针(它有那个“*”星号),所以必须使用“->”来访问它的成员,比如“.at(i)”,同理as [i] 或 ".push_back(i)" 在向量的末尾添加一个元素。
我已将您的原始代码放入 cmets 并用正确的代码替换它,这样您就可以看到我做了哪些更改。问我你是否想知道更多关于我改变了什么,兄弟。祝你好运!
#include <iostream>
#include <vector>
using namespace std;
template<class K, class V> class KeyPair
public:
K key;
V value;
KeyPair()
key = NULL;
value = NULL;
KeyPair(K key, V val)
this->key = key;
this->value = val;
;
template<class K, class V> class Dictionary
public:
vector<KeyPair<K,V>> * dict;
int positions;
Dictionary()
positions = 10;
dict = new vector<KeyPair<K, V>>[positions];
Dictionary(int pos)
positions = pos;
dict = new vector<KeyPair<K, V>>[positions];
void insert(K key, V value)
KeyPair<K, V> kp(key, value);
//int hash = key % positions;
//for (int i = 0; i < dict[hash].size(); i++)
for (int i = 0; i < dict->size(); i++)
//if (dict[hash][i].key == key)
if (dict->at(i).key == key)
cout << "llave ya existente" << endl;
return;
//dict[hash].push_back(kp);
dict->push_back(kp);
V checkAtKey(K key)
//int hash = key % positions;
//for (int i = 0; i < dict[hash].size(); i++)
for (int i = 0; i < dict->size(); i++)
//if (dict[hash][i].key == key)
if (dict->at(i).key == key)
//return dict[hash][i].value;
return dict->at(i).value;
return NULL;
void printDictionary()
//for (int i = 0; i < dict[i].size(); i++)
for (int i = 0; i < dict->size(); i++)
// cout << dict.value << endl;
KeyPair<K, V> curr_key = dict->at(i);
printf("%d - %s\n", curr_key.key, curr_key.value.c_str());
// or you can do this
// std::cout << curr_key.key << " - " << curr_key.value.c_str();
;
int main()
Dictionary<int, string> a;
a.insert(5, "perro");
a.insert(4, "gato");
Dictionary<int, string> b;
b.insert(15, "lombriz");
b.printDictionary();
return 0;
【讨论】:
嘿,谢谢你的帮助,我真的不明白你在 printDictionary() 部分做了什么,就像我从来没有群过 currkey 一样。代码仍然无法在终端上运行,因此它没有打印矢量的所有元素。 它正在打印所有元素。您正在打印“b”,而“b”只有 1 个元素:“15 - lombriz”。你可以做“a.printDictionary()”来获取其他人。 对于 printDictionary():“dict”向量是 KeyPair 结构的向量,对吗?为了读取结构中的元素,我将其保存在另一个 KeyPair 结构实例中,然后从那里读取 做 "dict->at(i).key" 和 "dict->at(i).value.c_str()" 会达到同样的效果以上是关于如何在 c++ 中打印字典?这是我正在运行的代码,我无法使用 printDicionary 方法的主要内容,如果未能解决你的问题,请参考以下文章