StringListTable

STL ¸ÊÀ» »ç¿ëÇϸé ÀÔ·Â ¼ø¼­¿¡ µû¶ó Á¤·Ä ÇÒ ¼ö°¡ ¾ø´Ù.
ÀÌ·± °æ¿ì¿¡´Â map°ú ÇÔ²² vector³ª list¸¦ °°ÀÌ »ç¿ëÇØ¾ß µÈ´Ù.

list¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ°í, list ¿ø¼ÒÀÇ À§Ä¡¸¦ map ÀúÀåÇÑ´Ù.

»ç¿ë¿ëµµ

XML·Î ºÒ·¯¿Â µ¥ÀÌÅ͸¦ ¼ø¼­¸¦ À¯ÁöÇÑä ÀúÀåÇÏ°í ½ÍÀº °æ¿ì¿¡, mapÀ¸·Î´Â Èûµé´Ù.
¿©±â¼­´Â list¸¦ ÀÌ¿ëÇؼ­ ¼ø¼­¸¦ À¯ÁöÇÑ´Ù.

±¸Çö

vector¸¦ »ç¿ëÇÏÁö ¾Ê°í list¸¦ ÀÌ¿ëÇÏ´Â ÀÌÀ¯´Â ¾Æ·¡ Äڵ带 º¸¸é¼­ »ý°¢Çغ¸ÀÚ.
m_list´Â list·Î ¸¸µé¾îÁ³°í, m_strMapÀº mapÀ¸·Î ¸¸µé¾ú´Ù.
m_list¸¦ vector·Î ¸¸µé°Ô µÇ¸é, »ðÀÔÀÌ ÀϾ¶§, vector Å©±â¸¦ ÀçÇÒ´çµÇ´Â ¼ø°£, º¤ÅÍ ¿ø¼ÒÀÇ À§Ä¡°¡ º¯ÇÏ´Â ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.
list´Â »ðÀÔÀÌ ÀϾµµ ¿ø¼ÒÀÇ À§Ä¡°¡ ¹Ù²î´Â ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.

void PushBack( const StringVector& key, const char* value )
{
    m_list.push_back( value );
    StringList::iterator listIter = m_list.end();
    listIter--;
    m_strMap.insert( std::make_pair( key, listIter ) );
}

typedef std::list< std::string > StringList;
typedef std::map< StringVector, StringList::iterator, CompareStringVector > StringVectorMap;

StringVectorMapÀº map_stringVector.htmlÀÇ StringVectorMap ¼±¾ðÀ» ¼öÁ¤Çß´Ù.

¿¹Àü ¼±¾ðÀº ´ÙÀ½°ú °°´Ù.
typedef  std::map< StringVector, std::string, CompareStringVector > StringVectorMap;
std::string ´ë½Å StringListÀÇ ¿ø¼Ò À§Ä¡¸¦ ³Ö´Â°É·Î ¼öÁ¤Çß´Ù.

StringListTableŬ·¡½º´Â map°ú list¸¦ È¿À²ÀûÀ¸·Î °ü¸® ÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

PushBack°ú AddÀÇ Â÷ÀÌÁ¡Àº Áߺ¹¾²±â Çã¿ë ¿©ºÎÀÌ´Ù.
Add´Â °°Àº Å°°¡ ÀÔ·ÂµÇ¸é ¿¹Àü µ¥ÀÌÅ͸¦ »èÁ¦ÈÄ »õ·Î¿î µ¥ÀÌÅ͸¦ Ãß°¡ÇÑ´Ù.

class StringListTable
{
public:
    ~StringListTable()
    {
        m_strMap.clear();
        m_list.clear();
    }

    //°°Àº µ¥ÀÌÅÍ°¡ ÀÖÀ¸¸é overwrite ÇÏÁö ¾Ê´Â´Ù.
    void PushBack( const StringVector& key, const char* value )
    {
        m_list.push_back( value );
        StringList::iterator listIter = m_list.end();
        listIter--;
        m_strMap.insert( std::make_pair( key, listIter ) );
    }

    //°°Àº µ¥ÀÌÅÍ°¡ ÀÖÀ¸¸é overwrite ÇÑ´Ù.
    void Add(const StringVector& key, const char* value )
    {
        Erase( key );
        PushBack( key, value );
    }

    bool Erase( const StringVector& key )
    {
        StringVectorMap::iterator iter = m_strMap.find( key );
        if( iter != m_strMap.end() )
        {
            m_list.erase( iter->second );
            m_strMap.erase( iter );
            return true;
        }   
        else
        {
            return false;
        }
    }

    const std::string* Find( const StringVector& key )
    {
        StringVectorMap::iterator iter = m_strMap.find( key );
        if( iter != m_strMap.end() )
        {
            StringList::iterator listIter = iter->second;
            return &(*listIter);
        }
        else
            return NULL;
    }

    const StringList& GetList()
    {
        return m_list;
    }

private:
    StringList      m_list;
    StringVectorMap m_strMap;
};

 

»ç¿ë

¹®ÀÚ¿­ º¤ÅÍ v1, v2, v3, v4¸¦ ¸¸µé°í strMap¿¡ ÀúÀåÇÑ´Ù.

¾Æ·¡ 4°¡Áö¸¦ °Ë»öÇؼ­ °á°ú°¡ Á¦´ë·Î ³ª¿À´ÂÁö È®ÀÎÇÑ´Ù.

"aaa"
"aaa",  "bbb"
"aaa",  "bbb", "ccc"
"bbb"

    StringListTable strMap;

    StringVector v1, v2, v3, v4, k;
    v1.push_back( "aaa" );

    v2.push_back( "aaa" );
    v2.push_back( "bbb" );

    v3.push_back( "aaa" );
    v3.push_back( "bbb" );
    v3.push_back( "ccc" );

    v4.push_back( "bbb" ); 

    strMap.PushBack( v1, "v1" );
    strMap.PushBack( v2, "v2" );
    strMap.PushBack( v3, "v3" );
    strMap.PushBack( v4, "v4" );

    k.push_back( "aaa" );
    const std::string* pString1 = strMap.Find( k );
    if( pString1 )
        printf_s( "aaa is %s\n", pString1->c_str() );

    k.push_back( "bbb" );
    const std::string* pString2 = strMap.Find( k );
    if( pString2 )
        printf_s( "aaa, bbb is %s\n", pString2->c_str() );

    k.push_back( "ccc" );
    const std::string* pString3 = strMap.Find( k );
    if( pString3 )
        printf_s( "aaa, bbb, ccc is %s\n",  pString3->c_str() );

 

    k.clear();
    k.push_back( "bbb" );
    const std::string* pString4 = strMap.Find( k );
    if( pString4 )
        printf_s( "bbb is %s\n", pString4->c_str() );        

 

°á°ú

Á¤»óÀûÀ¸·Î ³ª¿Â´Ù¸é ´ÙÀ½°ú °°ÀÌ ³ª¿Ã °ÍÀÌ´Ù.


aaa is v1
aaa, bbb is v2
aaa, bbb, ccc is v3
bbb is v4
 

¼Ò½º : StringListTableTest.cpp

ÂüÁ¶: ¿©·¯°³ÀÇ stringÀ» Å°·Î »ç¿ëÇÏ´Â map_stringVector.html