このコードでマップにペアを追加しても問題ありませんが、最後のマップではないペアを削除するとペアを追加してください。私は何をしているのですか?STLマップは、最初のペアを削除した後にペアを追加しません
SomeClass::eraseNamed(std::string aName)
{
if (!isEmpty())
{
ObjectList::iterator result;
result = find(aName);
if (result != ObjectList.end())
{
ObjectList.erase(result);
reorgObjectList();
return true;
}
}
return false;
}
findメソッドの場合:
ObjectList::iterator SomeClass::find(std::string aName)
{
ObjectList::iterator result = ObjectList.begin();
while (result != ObjectList.end())
{
if (aName == result->second.name())
return result;
result++;
}
return result;
}
とreorgObjectListのためのこれは削除コードである
typedef std::pair<int, Object> orderedObject;
typedef std::map<int, Object> ObjectList;
次のように
SomeClass::add(Object object)
if (!object.empty())
{
ObjectList::iterator result = find(object.name());
if (result == ObjectList.end())
{
object.order(size() + 1);
ObjectList.insert(orderedObject(object.order(), object));
}
else
{
ObjectList[result->first] = object;
}
}
ObjectListとorderedObjectが宣言されます。
bool SomeClass::reorgObjectList()
{
ObjectList::iterator i=ObjectList.begin();
int j=1;
for (i = ObjectList.begin(); i != ObjectList.end(); ++i)
{
if(j!=i->second.order())
i->second.order(j);
j++;
}
return true;
}
任意の提案???
どのように削除を行っていますか? –
オブジェクトはどこに宣言されていますか? – jalf
あなたはもっとコードを投稿しなければなりません... Jalfが示唆するように、オブジェクトはどこに宣言されていますか?ここには他にも問題があるようですが、使用法、スタイル、デザインについての提案をすることができます。私はいつも地図を使っています...しかし、私はこのような使い方はしていないようです。 – Tom