私は、2つのタイプとベクトルを持つテンプレートクラスを使用して、手作りの並べ替えのセットを含むプロジェクトに取り組んでいます(ポインターに変更することはできますが、現時点では変更できません)。
値の加算と出力は正常に機能し、お互いを使用してキーと値にアクセスすることもできます。
ただし、値の削除に問題があります。これは私が持っているコードです:
bool Remove(Tkey key)
{
for (int i = 0; i < size(); i++)
{
if (keyPtr[i] == key)
{
keyPtr.erase(keyPtr.begin() + (i-1));
valuePtr.erase(valuePtr.begin() + (i-1));
return true;
}
}
return false;
}
そのため、使用したい場合は次のようになります。
cout << "Remove Value 6" << endl;
list.Remove(6);
ベクトルに期待するのは、それが呼び出されると、キーが6のデータが削除されることです。ただし、これを出力として取得します。
キー:0値:0
キー:1値:3
キー:2値:6
キー:3値:9
キー:4値:12
キー:5値:15
キー:6値:18
キー:7値:21
キー:8値:24
キー:9値:27
値5を見つける:15
値6を削除
キー:0値:0
キー:1値:3
キー:2値:6
キー:3値:9
キー:4値:12
キー:0値:0
キー:6値:18
キー:7値:21
キー:8値:24
キー:9値:27
テンプレートクラスは、cppファイル内にmainメソッドがないと、ヘッダーとcppの間で分割できないため、すべてのクラスコードはヘッダーにあります。チェックする必要があるものはありますか、それともヘッダー内にあるコードと関係がありますか?
編集:これは私が出力を取得するために使用しているコードです。「main.cpp」というファイルにあります
#include <iostream>
#include <vector>
#include "DictionaryList.h"
using namespace std;
void main()
{
DictionaryList<int,int> list;
for (int i = 0; i < 11; i++)
{
list.Add(i, i*3);
}
for (int i = 0; i < 10; i++)
{
cout << "Key : " << list.Exists(i*3) << " Value : " << list.Get(i) << endl;
}
cout << "Find value 5: " << list.Get(5) << endl;
cout << "Remove Value 6" << endl;
list.Remove(6);
for (int i = 0; i < 10; i++)
{
cout << "Key : " << list.Exists(i*3) << " Value : " << list.Get(i) << endl;
}
system("pause");
}