いくつかのプリミティブ型(整数、浮動小数点数、文字列など)を文字列にエンコードするが、型の辞書式順序を維持するためのライブラリを知っている人はいますか?
理想的には、C ++ライブラリを探していますが、他の言語でも問題ありません。また、フォーマットを文字列自体にエンコードする必要はないと想定できます(つまり、int64 / string / floatの場合、エンコードされた文字列はこの情報をエンコードする必要はなく、データをエンコードするだけで十分です)。
いくつかのプリミティブ型(整数、浮動小数点数、文字列など)を文字列にエンコードするが、型の辞書式順序を維持するためのライブラリを知っている人はいますか?
理想的には、C ++ライブラリを探していますが、他の言語でも問題ありません。また、フォーマットを文字列自体にエンコードする必要はないと想定できます(つまり、int64 / string / floatの場合、エンコードされた文字列はこの情報をエンコードする必要はなく、データをエンコードするだけで十分です)。
この論文 (「Efficient Lexicographic Encoding of Numbers」) を見てください。これは、数値型を文字列として表現する方法を示しており、文字列の辞書式順序が基になる数値の数値順序と同じになるようにします。任意の長さの数字に対応します。
整数と長整数を順序を保持する文字列に変換するという問題がありました。私は Java で作業していたので、符号付きの型しか持っていませんでした。
私のアルゴリズムは非常に単純でした:
toEncode ^ Long.MAX_VALUE
long の場合)。それ以外の場合、負の数は正の数よりも大きくなります。+
および/
) は、文字の後の数字の後にあります。これは ASCII から完全に逆です。私の変更されたエンコーディングは、単に ASCII 順序を使用しています。(通常の base64 ではないことを明確にするために、特殊文字をパディングとして-
および_
に変更し~
ました。これらは URL 内で引き続き使用できますが、これは私が持っていた別の制約でした。)ところで... Amazon Web ServiceのSimpleDBでは、すべてのデータが文字列として保存されます。その選択コンパレータは、辞書式順序付けを使用します。AWS は、さまざまな型をエンコードするためのユーティリティ関数を提供します。たとえば、整数は、事前に整数の範囲を認識し、ゼロパディングとオフセットを介して調整してエンコードされます(たとえば、負の整数の場合)。もちろん、可能な限り最悪の範囲を指定することもできます。
「クエリ 201: Amazon SimpleDB クエリのヒントとコツ」を参照してください - http://aws.amazon.com/articles/1232
http://typica.s3.amazonaws.com/com/xerox/amazonws/sdb/DataUtils.html
固定の列幅に数値を先頭にゼロを付けて書き込むだけで、文字列は通常どおりです。このように:
0.1 -> 0000000.1000000
123 -> 0000123.0000000
foo -> foo
X -> X
次に、テキストとして並べ替えることができます (例:sort
なしの Unix -n
)。どのようにそのことについて?