Ich versuche, ein Element aus einer Liste zu entfernen. Die Elemente sind Strukturen. Ich habe eine schwierige Zeit damit. Die Online-Beispiele sind nicht für Strukturelemente. Ich habe versucht, den Schlüssel/die Werte auf die Standardwerte zu setzen, aber sobald ich die Daten durchlaufen habe, druckt es einen Leerraum, was bedeutet, dass das Element immer noch da ist. Ich muss es komplett entfernen. Unten ist mein Code.Löschen eines Strukturelements in einer Liste
.H Datei
#include<list>
#include<queue>
using namespace std;
template <typename K, typename V, int CAP>
class HashTable {
public:
HashTable(int(*)(const K&));
bool HashTable<K, V, CAP>::containsKey(const K& key) const;
HashTable<K, V, CAP>& operator=(const HashTable<K, V, CAP>&);
V& operator[](const K&); // setter
V operator[](const K&) const; // getter
queue<K> keys() const;
int size() const {return siz;};
void deleteKey(const K&);
private:
int getIndex(const K& key) const;
struct Node{K key; V value;};
int(*hashCode)(const K&);
list<Node> data[CAP];
int cap;
int siz;
};
Hier ist die Löschfunktion I umzusetzen versuchen.
template<typename K, typename V, int CAP>
inline void HashTable<K, V, CAP>::deleteKey(const K & key)
{
typename list<Node>::iterator it; // getters need to use const_iterator
for (int i = 0; i < CAP; i++)
{
for (it = data[i].begin(); it != data[i].end(); it++)
{
if (it->key == key)
{
// these are a few things I tried, I know this is not right.
data[i].back().key = K();
data[i].back().value = V();
data[i].remove(key); // Error C2664 'void std::list<HashTable<std::string,int,100>::Node,std::allocator<_Ty>>::remove(const _Ty &)':
// cannot convert argument 1 from 'const std::string' to 'const HashTable<std::string,int,100>::Node &' 10HashTable
}
}
}
}
alle gaben mir Fehler. Der erste Code, den du geschrieben hast, gab mir die geringsten Fehler. es hieß "Fehler \t C2664 \t 'void std :: list :: Knoten, std :: allocator <_Ty>> :: entfernen (const _Ty &)': kann Argument 1 nicht konvertieren 'std :: _ List_iterator :: Knoten >>>' zu 'const HashTable :: Node & '\t 10HashTable " –
asmcriminal
@asmcriminal Sieht so aus, als ob Sie" Erase "falsch geschrieben haben. Möglicherweise müssen Sie auch den C++ 11-Modus in Ihrem Compiler für die anderen aktivieren. – molbdnilo
danke das hat funktioniert. Ich dachte, ich kopiere und klebte es direkt. Ich denke nicht. – asmcriminal