Software & Finance





Visual C++ STL Using Map - inserting elements, and const_iterator





Here is the sample code for STL Map of two strings. The first string is a key field to store the filename and second string is the value field to store last file write time.

When accessing, I have used const_iterator for iterating through the map elements. The iterator it != map.end() represents, whether we reached the end of the map or not. ++it (preincrement is faster) refers to move to next item.

The it->first is used to access the key field and it->second is used to access the value field.

 

#include <string>

#include <vector>

#include <windows.h>

 

// searchkey = "c:\\kathir\\*.txt";

int GetFileList(const char *searchkey, std::map<std::string, std::string> &map)

{

    WIN32_FIND_DATA fd;

    HANDLE h = FindFirstFile(searchkey,&fd);

 

    if(h == INVALID_HANDLE_VALUE)

    {

        return 0; // no files found

    }

 

    while(1)

    {

        char buf[128];

        FILETIME ft = fd.ftLastWriteTime;

        SYSTEMTIME sysTime;

        FileTimeToSystemTime(&ft, &sysTime);

        sprintf(buf, "%d-%02d-%02d",sysTime.wYear, sysTime.wMonth, sysTime.wDay);

 

        map[fd.cFileName] = buf;

 

        if(FindNextFile(h, &fd) == FALSE)

            break;

    }

    return map.size();

}

 

void main()

{

    std::map<std::string, std::string> map;

    int count = GetFileList("c:\\kathir\\*.txt", map);

 

    // Using const_iterator

 

    for(std::map<std::string, std::string>::const_iterator it = map.begin();

        it != map.end(); ++it)

    {

        MessageBox(it->first.c_str());

        MessageBox(it->second.c_str());

    }

}