Есть ли более эффективный способ побайтного сравнения данных, чем использование сравнения оператор контейнера списка C ++?
Я должен сравнить [большой? 10 кБайт
Поэтому я читаю файлы побайтно и сохраняю значения в списке неподписанных символов. Ресурсы этого списка обрабатываются shared_ptr , так что я могу передать его в программе без необходимости беспокоиться о размере списка
typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;
contentPtr GetContent( fs::path filePath ){
contentPtr actualContent (new list< unsigned char > );
// Read the file with a stream, put read values into actual content
return actualContent;
Это делается дважды, потому что есть всегда две копии файла. Содержимое этих двух файлов должно сравниваться, и выдается исключение, если обнаружено несоответствие.
void CompareContent() throw( NotMatchingException() ){
// this part is very fast, below 50ms
contentPtr contentA = GetContent("/fileA");
contentPtr contentB = GetContent("/fileB");
// the next part takes about 2secs with a file size of ~64kByte
if( *contentA != *contentB )
throw( NotMatchingException() );
}
Моя проблема заключается в следующем:
С увеличением размера файла сравнение списков происходит очень медленно. При работе с файлами размером около 100 кБайт для сравнения содержимого потребуется до двух секунд. Увеличение и уменьшение с размером файла ....
Есть ли более эффективный способ сделать это сравнение? Это проблема используемого контейнера?