ホーム » gcc » ファイルを新しい順に

ファイルを新しい順に

ファイルを新しい順に並べるコードが欲しかったので,次の様なコードを与えて Copilot に聞いてみた.

v_tstring	Sort_mtime_new	(c_v_tstring& doc_files)
{
	std::vector<time_t>	doc_times ;
	{
		for (size_t index=0 ; index<doc_files.size() ; index++) {
			time_t	doc_time = ::File_GetMTime(doc_files[index]) ;
			doc_times.push_back(doc_time) ;
			}
		}
	v_tstring	sort_files ;
	{
		//	...
		}
	return	sort_files ;
	}

::Sort_mtime_new


何度か繰り返して,それなりのコードに.

#include <vector>
#include <string>
#include <algorithm>
#include <time.h>

// v_tstring が std::vector<std::string> のような型だと仮定
typedef std::vector<std::string> v_tstring;
typedef const v_tstring& c_v_tstring;

struct FileEntry {
    std::string name;
    time_t mtime;
};

// 比較関数オブジェクト(更新日時の新しい順)
struct CompareByMtime {
    bool operator()(const FileEntry& a, const FileEntry& b) const {
        return a.mtime > b.mtime; // 降順
    }
};

// ダミー: ファイルの更新時刻を返す関数
time_t File_GetMTime(const std::string& path)
{
    // 実際には stat() や Win32 API を使って取得する
    return time(NULL);
}

v_tstring Sort_mtime_new(c_v_tstring doc_files)
{
    std::vector<FileEntry> entries;
    for (size_t i = 0; i < doc_files.size(); i++) {
        FileEntry fe;
        fe.name = doc_files[i];
        fe.mtime = File_GetMTime(doc_files[i]);
        entries.push_back(fe);
    }

    // ソート(VC6でもOK)
    std::sort(entries.begin(), entries.end(), CompareByMtime());

    v_tstring sort_files;
    for (size_t i = 0; i < entries.size(); i++) {
        sort_files.push_back(entries[i].name);
    }

    return sort_files;
}

std::sort はあまり書かないコードなので,自分で考えるより早かったと思う.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.