ファイルを新しい順に並べるコードが欲しかったので,次の様なコードを与えて 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 ;
}

何度か繰り返して,それなりのコードに.
#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 はあまり書かないコードなので,自分で考えるより早かったと思う.