Java에서 C++로 작성한 프로그램을 다시 작성하는 중입니다. 나는 내가 사용하고 복잡한 데이터 구조에 문제를 많이 데 : 그것은 나에게 동안을했다C++에서 중첩 unordered_maps
unordered_map< string, unordered_map<string, list<string> > >
하지만 난 (더 나은 단어의 부족에 대한) '항목'을 추가하는 방법을 알아낼 결국 수 있었다 unordered_map에. 그러나 unordered_map :: find를 사용하여 항목을 검색하는 방법을 파악할 수 없기 때문에 찾아 왔습니다.
내 코드는 다음과 같습니다 :
/*
* QueryDDex.cpp
*
* Created on: Aug 13, 2013
* Author: Zach Graceffa
*/
#include <zorba/store_manager.h>
#include <zorba/xquery_exception.h>
#include <zorba/zorba.h>
#include <zorba/iterator.h>
#include <zorba/xquery.h>
#include <zorba/item.h>
#include <tr1/unordered_map>
#include <string>
#include <fstream>
#include <list>
using namespace zorba;
using namespace std;
using namespace tr1;
void runQuery (char * inFile) throw(ZorbaException)
{
//create return variable
unordered_map< string, unordered_map<string, list<string> > > nodeContainer;
//open file
ifstream myFile;
const char * ext = ".xq";
myFile.open(strcat(inFile, ext), ifstream::in);
//Instantiate the Zorba Object
void* lStore = zorba::StoreManager::getStore();
Zorba* lZorba = Zorba::getInstance(lStore);
//Feed file into string
string line;
string xqDoc;
if (myFile.is_open())
{
while (myFile.good())
{
getline (myFile, line);
xqDoc += (line + "\n");
}
myFile.close();
}
else
xqDoc = "err";
//Compile the Query
XQuery_t lQuery = lZorba->compileQuery(xqDoc);
//Create an Iterator and open it so it can be used
Iterator_t parentIterator = lQuery->iterator();
parentIterator->open();
//Create an empty Item for future use
Item lItem;
while (parentIterator->next(lItem))
{
//Create an iterator to iterate over all the child nodes that belong to the parent
Iterator_t childIterator = lItem.getChildren();
//Open the iterator for future use
childIterator->open();
//Create an empty item, which will be used to store the child nodes.
Item child;
//Select the first child node
while(childIterator->next(child)){
unordered_map<string, list<string> > childOne;
Iterator_t grandChildIterator = child.getChildren();
grandChildIterator->open();
Item grandChild;
//Create an empty item to hold the section tag name.
Item sectionName;
child.getNodeName(sectionName);
nodeContainer.insert(pair<string, unordered_map<string, list<string> > >(sectionName.getStringValue(), childOne));
while(grandChildIterator->next(grandChild)){
list<string> grandChildren;
//Create an empty Item to hold the contents of tag name
Item tagName;
//Put the tag name in variable tagName
grandChild.getNodeName(tagName);
unordered_map<string, list<string> > temp;
unordered_map< string, unordered_map<string, list<string> > >::const_iterator got = nodeContainer.find(sectionName.getStringValue());
if (temp.key_eq(tagName.getStringValue())){
list<string> s = temp.find(tagName.getStringValue());
s.insert(grandChild.getStringValue());
temp.put(sectionName.getStringValue(), s);
}else{
grandChildren.add(grandChild.getStringValue());
temp.insert(tagName.getStringValue(), grandChildren);
}
nodeContainer.insert(pair<string, unordered_map<string, list<string> > >(sectionName.getStringValue(), temp));
//Release any memory consumed by tagName
tagName.close();
//free tagName;
}//grandchild-loop
//Release any memory consumed by Item grandChild
grandChild.close();
//delete grandChild;
}//child-loop
}//end parent-loop
}
난 당신에게 내가 현재 작업하고있는 전체 파일을 제공합니다. 자바 코드를 직접 내 C++ IDE에 붙여 넣기 만하면 많은 오류가 발생하며 간단하게 한 줄씩 작업하고 있습니다. 이 코드 줄에 초점을하시기 바랍니다 :
unordered_map< string, unordered_map<string, list<string> > >::const_iterator got = nodeContainer.find(sectionName.getStringValue());
내가 추가해야 또 다른 것은 내가 C++에서 녹슨 오전입니다 나는 모든 오전
unordered_map< string, unordered_map<string, list<string> > >
이상이 기능을 수행하는 더 좋은 방법이 있다면 그렇게 귀. 그 후이 함께 할 수있는 다음 단계를 작동하고 다음
const string &keyToTemp(sectionName.getStringValue());
unordered_map< string, unordered_map<string, list<string> > >::const_iterator got = nodeContainer.find(keyToTemp);
:
훨씬 :)
"나는 복잡한 데이터 구조에 많은 어려움을 겪고 있습니다."- 좋은 인정입니다. 그것이 저자로서 당신에게 복잡하다면, 기회는 여기에있는 사람들에게 훨씬 더 복잡 할 것입니다. 자신이나 SO 사람들이 문제를 해결할 수있는 더 나은 기회를 작은 관리 가능한 하위 문제로 나눔으로써 해결할 수 있습니다. – Arun
문자열 맵에 문자열을 매핑하여 문자열 목록에 .... 복잡한 부분은 무엇입니까? * 복사 * 아마도 비싸지 만 명백하게 복잡하지는 않습니다. – WhozCraig
@Arun 덕분에 미래를 염두에 두겠습니다. – zg303